From 251b62214e242eb797a8d5d69947dc9b8e8cd059 Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Fri, 9 Apr 2021 11:28:27 +0800 Subject: [PATCH 01/27] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=86=E6=9C=89?= =?UTF-8?q?=E5=85=B3=E7=9F=A9=E9=98=B5=E8=8C=83=E6=95=B0=E7=9A=84=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configuration/extensions.json | 3 + packages/pm_calc/__init__.py | 0 packages/pm_calc/fastui/__init__.py | 5 + packages/pm_calc/fastui/base.py | 215 ++ packages/pm_calc/fastui/dropna.py | 53 + packages/pm_calc/fastui/equation_solve.py | 50 + packages/pm_calc/fastui/fillna.py | 77 + packages/pm_calc/fastui/matrix_calc.py | 57 + packages/pm_calc/fastui/matrix_inv.py | 54 + packages/pm_calc/fastui/matrix_numbers.py | 48 + packages/pm_calc/fastui/templates/dropna.json | 18 + packages/pm_calc/fastui/templates/dropna.py | 68 + packages/pm_calc/fastui/templates/template.py | 101 + packages/pm_calc/icons/equation_solve.png | Bin 0 -> 5758 bytes packages/pm_calc/icons/matrix_calc.png | Bin 0 -> 3802 bytes packages/pm_calc/ipython_console.jpg | Bin 0 -> 8465 bytes packages/pm_calc/main.py | 169 ++ packages/pm_calc/package.json | 26 + packages/pm_calc/preprocess.py | 1835 +++++++++++++++++ packages/pm_calc/translations/qt_zh_CN.qm | Bin 0 -> 3538 bytes packages/pm_calc/translations/qt_zh_CN.ts | 304 +++ packages/pm_preprocess/fastui/base.py | 14 +- pyminer_comm/data_client/data_client.py | 2 +- 23 files changed, 3094 insertions(+), 5 deletions(-) create mode 100644 packages/pm_calc/__init__.py create mode 100644 packages/pm_calc/fastui/__init__.py create mode 100644 packages/pm_calc/fastui/base.py create mode 100644 packages/pm_calc/fastui/dropna.py create mode 100644 packages/pm_calc/fastui/equation_solve.py create mode 100644 packages/pm_calc/fastui/fillna.py create mode 100644 packages/pm_calc/fastui/matrix_calc.py create mode 100644 packages/pm_calc/fastui/matrix_inv.py create mode 100644 packages/pm_calc/fastui/matrix_numbers.py create mode 100644 packages/pm_calc/fastui/templates/dropna.json create mode 100644 packages/pm_calc/fastui/templates/dropna.py create mode 100644 packages/pm_calc/fastui/templates/template.py create mode 100644 packages/pm_calc/icons/equation_solve.png create mode 100644 packages/pm_calc/icons/matrix_calc.png create mode 100644 packages/pm_calc/ipython_console.jpg create mode 100644 packages/pm_calc/main.py create mode 100644 packages/pm_calc/package.json create mode 100644 packages/pm_calc/preprocess.py create mode 100644 packages/pm_calc/translations/qt_zh_CN.qm create mode 100644 packages/pm_calc/translations/qt_zh_CN.ts diff --git a/configuration/extensions.json b/configuration/extensions.json index b4359d8a..c969f6db 100644 --- a/configuration/extensions.json +++ b/configuration/extensions.json @@ -91,5 +91,8 @@ }, "jupyter_notebook_support": { "enabled": true + }, + "pm_calc": { + "enabled": true } } \ No newline at end of file diff --git a/packages/pm_calc/__init__.py b/packages/pm_calc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/packages/pm_calc/fastui/__init__.py b/packages/pm_calc/fastui/__init__.py new file mode 100644 index 00000000..1def17ac --- /dev/null +++ b/packages/pm_calc/fastui/__init__.py @@ -0,0 +1,5 @@ +# -*- coding:utf-8 -*- +# @Time: 2021/2/7 22:37 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: __init__.py \ No newline at end of file diff --git a/packages/pm_calc/fastui/base.py b/packages/pm_calc/fastui/base.py new file mode 100644 index 00000000..33e9f0ae --- /dev/null +++ b/packages/pm_calc/fastui/base.py @@ -0,0 +1,215 @@ +""" +这是定义基类的基础文件,里面是用代码生成方式来制作功能性面板的示例。比如 +可以参阅同一目录下的其他文件。这些面板默认样式为悬浮在最上方,即使面板弹出,也可以操作主界面。 + +面板文件与PyMiner主程序完全解耦,启动PyMiner主程序后,可以直接运行此文件,或者fastui文件夹下的任何.py文件, +以此调试面板。此时,需要确保PyMiner的工作空间中有pandas.DataFrame类型的数据。 + +如datamerge.py(数据集合并)/ dropdata.py(去除缺失值)/ fillna(填充缺失值) 等。 + +最底层基类是BaseOperationDialog,是一个QDialog对话框基类,里面定义了一系列的基础方法,比如变量获取等。它是一个完全空白的对话框。 +次底层基类是DFOperationDialog,是用于数据集操作的基类。它定义有一个变量选择下拉菜单self.combo_box、一个参数输入面板self.panel,以及一个带有 +四个按钮(预览、保存、关闭和帮助)的按钮面板。 + +数据合并的面板继承于BaseOperationDialog,其余面板都继承于DFOperationDialog。这是因为数据合并面板需要多个选择数据的下拉框,用后者满足不了要求。 + +有关底层基类中的相关方法,请移步相应类定义的位置。 + +这些面板生成的函数,应当是一个有返回值的函数,参数为工作空间中的变量,或者是字符串、数字等。 + +比如,工作空间中有函数a、b。数据合并面板希望生成一个横向合并a和b的函数。那么,最终生成的代码应该为: +pd.concat([a,b],axis=0) + +这段函数有两种执行方式。一种是预览(preview),由preview按钮触发,调用基类的preview方法,直接执行pd.concat([a,b],axis=0);另一种是储存(store), +由“Save to var“按钮触发,调用基类store方法,要求用户输入一个新的变量名,然后执行代码f = pd.concat([a,b],axis=0),(f为用户输入的变量名)。 + +pd.concat函数有返回值。在点击“preview” + +@Time: 2021/2/8 12:54 +@Author: Zhanyi Hou +@Email: 1295752786@qq.com +@File: pmgui.py +""" +from abc import abstractmethod +from typing import List + +from PySide2.QtCore import Qt, QCoreApplication, Signal +from pmgwidgets import PMGPanel, PMGOneShotThreadRunner +from pyminer_comm import get_var_names, run_command, call_interface +from utils import input_identifier, bind_combo_with_workspace +from PySide2.QtWidgets import QDialog, QVBoxLayout, QApplication, QPushButton, QComboBox, QHBoxLayout, QLabel, \ + QTextBrowser + + +class BaseOperationDialog(QDialog): + """ + 最底层的功能面板基类。 + 定义了代码生成的有关方法。 + + """ + signal_update_combo = Signal() + + def __init__(self): + self.thrunner: PMGOneShotThreadRunner = None + super(BaseOperationDialog, self).__init__() + + def store(self): + """ + 执行存储到变量的命令。 + + Returns: + + """ + code = self.get_assignment_code() + if code != '': + run_command(command=code, hint_text=self.get_prompt_template() + code, hidden=False) + + def preview(self) -> None: + """ + 预览分析结果。 + Returns: + + """ + code = self.get_value_code() + if code != '': + run_command(command=code, hint_text=self.get_prompt_template() + code, hidden=False) + + def help(self) -> None: + """ + 弹出帮助面板 + Returns: None + + """ + dlg = QDialog() + dlg.setLayout(QVBoxLayout()) + textBrowser = QTextBrowser(self) + dlg.layout().addWidget(textBrowser) + textBrowser.setMarkdown(self.get_help_content()) + dlg.exec_() + + def get_help_content(self) -> str: + """ + 生成帮助内容 + + 为markdown格式 + + Notes:子类最好重写这个方法 + Returns: + + """ + return """# 帮助\n\n暂未定义帮助""" + + def get_prompt_template(self) -> str: + """ + 获取提示模板 + + Notes:子类可以不重写这个方法 + Returns: + """ + return '' + + def kwargs_to_str(self, kwargs: dict) -> str: + """ + 将字典参数转化为字符串的简易方法 + Args: + kwargs: + + Returns: + + """ + args_str = '' + for k, v in kwargs.items(): + args_str += '{k}={v},'.format(k=k, v=repr(v)) + return args_str + + @abstractmethod + def get_value_code(self) -> str: + """ + 获取一段代码,这段代码应当有返回值,而不是赋值代码。 + 例如, “a = pd.concat([c,d])” + + Notes:子类必须重写这个方法。 + + Returns: + """ + return '' + + def get_assignment_code(self) -> str: + """ + 获取赋值语句。实际上就是先让用户输入一个变量名,然后将这个变量名和赋值语句放在get_value_code方法 + 生成的代码的左侧。 + + 倘若用户输入的变量名是“a”,get_value_code方法生成的代码为“pd.concat([c,d])”,那么这个方法生成的代码就是: + “a = pd.concat([c,d])” + + 子类中通常无需重写这个方法 + + Returns: 合并好的代码 + """ + code = self.get_value_code() + identifier = input_identifier(parent=self, default_name=self.combo_box.currentText(), allow_existing_name=True) + if identifier != '': + code = identifier + ' = ' + code + return code + return '' + + def get_selected_variables(self) -> List[str]: + """ + 获取当前界面上选中的变量。 + 当界面为PyMiner调用时,此方法不能在主进程中调用,否则会阻塞消息循环。 + Returns: 当前界面上选中的变量,可能是一个列表。 + """ + return call_interface('workspace_inspector', 'get_selected_variables', {}, request_ret=True) + + def showEvent(self, arg__1: 'QShowEvent') -> None: + if self.thrunner is None or not self.thrunner.is_running(): + self.thrunner = PMGOneShotThreadRunner(callback=self.get_selected_variables) + self.thrunner.signal_finished.connect(self.on_update_combo) + + +class DFOperationDialog(BaseOperationDialog): + signal_update_combo = Signal() + + def __init__(self): + super(DFOperationDialog, self).__init__() + self.setLayout(QVBoxLayout()) + self.combo_box = QComboBox() + bind_combo_with_workspace(self.combo_box) + self.panel = PMGPanel() + self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint) + self.button_layout = QHBoxLayout() + + self.button_preview = QPushButton(QCoreApplication.translate('BaseDFOperationDialog', "预览")) + self.button_store = QPushButton(QCoreApplication.translate('BaseDFOperationDialog', "保存到变量")) + self.button_close = QPushButton(QCoreApplication.translate('BaseDFOperationDialog', "关闭")) + self.button_help = QPushButton(QCoreApplication.translate('BaseDFOperationDialog', "帮助")) + + # self.button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Help) + self.button_layout.addWidget(self.button_preview) + self.button_layout.addWidget(self.button_store) + self.button_layout.addWidget(self.button_help) + self.button_layout.addWidget(self.button_close) + + self.button_preview.clicked.connect(self.preview) # 预览 + self.button_store.clicked.connect(self.store) # 储存 + self.button_close.clicked.connect(self.close) # 关闭对话框 + self.button_help.clicked.connect(self.help) # 显示帮助 + + self.hint_label = QLabel(self.tr('选择变量')) + self.layout().addWidget(self.hint_label) + self.layout().addWidget(self.combo_box) + self.layout().addWidget(self.panel) + self.layout().addLayout(self.button_layout) + + def on_update_combo(self, vars: List[str]): + self.combo_box.clear() + self.combo_box.addItems(get_var_names()) + if len(vars) > 0: + self.combo_box.setCurrentText(vars[0]) + + +if __name__ == '__main__': + app = QApplication([]) + md = DFOperationDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/dropna.py b/packages/pm_calc/fastui/dropna.py new file mode 100644 index 00000000..93e6e226 --- /dev/null +++ b/packages/pm_calc/fastui/dropna.py @@ -0,0 +1,53 @@ +""" +这是一个去除缺失值的面板 + +运行方式:运行PyMiner后,直接运行此文件即可。 +需要确保PyMiner的工作空间中有pandas.DataFrame类型的数据。 + +# -*- coding:utf-8 -*- +# @Time: 2021/2/7 21:00 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: datamerge.py +""" +from PySide2.QtWidgets import QApplication + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class DropNADialog(DFOperationDialog): + def __init__(self, ): + super(DropNADialog, self).__init__() + views = [ + ('combo_ctrl', 'axis', self.tr('去除方向'), 0, [0, 1], [self.tr('行'), self.tr('列')]), + ('combo_ctrl', 'how', self.tr('去除标准'), 'any', ['all', 'any'], [self.tr('该行/列数据全为缺失值'), + self.tr('该行/列任一数据为缺失值')]), + ('numberspin_ctrl', 'thresh', '保留非空值多于等于此的行/列', 1, '', (0, 1000), 1), + ('check_ctrl', 'use_subset', self.tr('按行列筛选'), False), + ('list_ctrl', 'subset', self.tr('筛选目标列'), [[], [], ], lambda: None), + ] + self.panel.set_items(views) + self.panel.set_as_controller('how', ['thresh'], 'all', 'enable') + self.panel.set_as_controller('use_subset', ['subset'], True, 'enable') + + def get_prompt_template(self) -> str: + return self.tr('Drop NA:') + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() + varname = self.combo_box.currentText() + use_subset = values.pop('use_subset') + + code = '{varname}.dropna({args_str})'. \ + format(varname=varname, args_str=self.kwargs_to_str(values)) + return code + + +if __name__ == '__main__': + app = QApplication([]) + md = DropNADialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/equation_solve.py b/packages/pm_calc/fastui/equation_solve.py new file mode 100644 index 00000000..756e7c00 --- /dev/null +++ b/packages/pm_calc/fastui/equation_solve.py @@ -0,0 +1,50 @@ +from PySide2.QtWidgets import QApplication, QMessageBox + +from pyminer_comm import get_var_names + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class LinerEquationSolveDialog(DFOperationDialog): + def __init__(self, ): + super(LinerEquationSolveDialog, self).__init__() + self.setWindowTitle("线性方程组求解/矩阵求逆") + self.combo_box.hide() + self.hint_label.hide() + names = get_var_names() + + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No Data found in workspace!')) + return + else: + name_A = names[0] + name_B = names[-1] + views = [ + ('combo_ctrl', 'calc_type', self.tr('求解类型'), "solve", + ["solve", "tensorsolve"], + ['线性方程组AX=B', '张量方程AX=B']), + ('combo_ctrl', 'A', 'A', name_A, names), + ('combo_ctrl', 'B', 'B', name_B, names) + ] + self.panel.set_items(views) + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + name_A = values["A"] + name_B = values["B"] + calc_type = values["calc_type"] + if calc_type == "solve": + pass + elif calc_type == "tensorsolve": + pass + return "np.linalg.{func_name}({name_A},{name_B})".format(func_name=calc_type, name_A=name_A, name_B=name_B) + + +if __name__ == '__main__': + app = QApplication([]) + md = LinerEquationSolveDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/fillna.py b/packages/pm_calc/fastui/fillna.py new file mode 100644 index 00000000..f5b475dd --- /dev/null +++ b/packages/pm_calc/fastui/fillna.py @@ -0,0 +1,77 @@ +# -*- coding:utf-8 -*- +# @Time: 2021/2/7 21:00 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: datamerge.py + + +# DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) +# value: 变量、字典、Series,DataFrame;用于填充缺失值,或指定为每个索引(对于Series)或列(对于DataFrame)的缺失值使用字典/Series/DataFrame的值填充 +# method: {'backfill', 'bfill', 'pad', 'ffill', None}, 默认None, pad/ffill表示向后填充空值,backfill/bfill表示向前填充空值 +# axis: {0 or 'index', 1 or 'columns'} +# inplace: boolean, 默认为False。若为True, 在原地填满 +# limit: int, 默认为None, 如果指定了方法, 则这是连续的NaN值的前向/后向填充的最大数量 +# downcast: dict, 默认None, 字典中的项为类型向下转换规则。 + +# 以上有关函数名称的解释来源于简书。 +# 作者:KissedbyFire +# 链接:https://www.jianshu.com/p/17cb2733a6d7 + + +from typing import List + +from pmgwidgets import PMGPanelDialog, PMGPanel +from pyminer_comm.base import is_pyminer_service_started +from pyminer_comm import get_var_names, get_var, set_var, run_command +from utils import VariableSelect, input_identifier +from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + + + +class FillNADialog(DFOperationDialog): + def __init__(self, ): + super(FillNADialog, self).__init__() + views = [ + ('combo_ctrl', 'replace_policy', self.tr('Replace Policy'), 1, [0, 1], + [self.tr('User Defined Value'), self.tr('Fill Front or Back')]), + ('line_ctrl', 'value', self.tr('Value to replace'), ''), + ('combo_ctrl', 'method', self.tr('Fill Direction'), 'ffill', ['ffill', 'bfill'], + [self.tr('Front Fill'), self.tr('Back Fill')]), + ('combo_ctrl', 'axis', self.tr('Fill Axis'), 0, [0, 1], [self.tr('By Row'), + self.tr('By Column')]), + + ('check_ctrl', 'with_limit', self.tr('Limit Maximum Fills'), True), + ('numberspin_ctrl', 'limit', self.tr('Maximum Fills'), 1, '', (0, 1000), 1), + ('check_ctrl', 'inplace', self.tr('In Place'), False), + ] + self.panel.set_items(views) + self.panel.set_as_controller('replace_policy', ['value'], 0, 'enable') + self.panel.set_as_controller('replace_policy', ['method', 'axis'], 1, 'enable') + self.panel.set_as_controller('with_limit', ['limit'], True, 'enable') + + def get_prompt_template(self) -> str: + return self.tr('Fill NA:') + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + varname = self.combo_box.currentText() + policy = values.pop('replace_policy') + with_limit = values.pop('with_limit') + args_str = '' + for k, v in values.items(): + args_str += '{k}={v},'.format(k=k, v=repr(v)) + code = '{varname}.fillna({args})'.format(varname=varname, args=args_str) + return code + + +if __name__ == '__main__': + app = QApplication([]) + md = FillNADialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/matrix_calc.py b/packages/pm_calc/fastui/matrix_calc.py new file mode 100644 index 00000000..e8d0abdf --- /dev/null +++ b/packages/pm_calc/fastui/matrix_calc.py @@ -0,0 +1,57 @@ +from PySide2.QtWidgets import QApplication, QMessageBox + +from pyminer_comm import get_var_names + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class MatrixCalcDialog(DFOperationDialog): + def __init__(self, ): + super(MatrixCalcDialog, self).__init__() + self.setWindowTitle("矩阵计算") + self.combo_box.hide() + self.hint_label.hide() + names = get_var_names() + + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No Data found in workspace!')) + return + else: + name_A = names[0] + name_B = names[-1] + views = [ + ('combo_ctrl', 'calc_type', self.tr('计算类型'), "outer_product", + ["inner_product", "outer_product", "add", "sub"], + ['A·B', 'A×B', 'A+B', 'A-B']), + ('combo_ctrl', 'A', 'A', name_A, names), + ('combo_ctrl', 'B', 'B', name_B, names) + ] + self.panel.set_items(views) + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + name_A = values["A"] + name_B = values["B"] + calc_type = values["calc_type"] + args_str = '' + func_name = "" + if calc_type == "inner_product": + func_name = 'np.multiply' + return "{func_name}({name_A},{name_B})".format(func_name=func_name, name_A=name_A, name_B=name_B) + elif calc_type == "outer_product": + func_name = "np.dot" + return "{func_name}({name_A},{name_B})".format(func_name=func_name, name_A=name_A, name_B=name_B) + elif calc_type == "add": + return "{name_A}+{name_B}".format(name_A=name_A, name_B=name_B) + elif calc_type == "sub": + return "{name_A}-{name_B}".format(name_A=name_A, name_B=name_B) + + +if __name__ == '__main__': + app = QApplication([]) + md = MatrixCalcDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/matrix_inv.py b/packages/pm_calc/fastui/matrix_inv.py new file mode 100644 index 00000000..3b23f194 --- /dev/null +++ b/packages/pm_calc/fastui/matrix_inv.py @@ -0,0 +1,54 @@ +from PySide2.QtWidgets import QApplication, QMessageBox + +from pyminer_comm import get_var_names + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class MatrixInvDialog(DFOperationDialog): + def __init__(self, ): + super(MatrixInvDialog, self).__init__() + self.setWindowTitle("矩阵求逆/转置") + self.combo_box.hide() + self.hint_label.hide() + names = get_var_names() + + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No Data found in workspace!')) + return + else: + name_A = names[0] + views = [ + ('combo_ctrl', 'calc_type', self.tr('计算类型'), "inv", + ["transpose", "inv", "pinv", "tensorinv"], + ["转置", '逆矩阵', '矩阵伪逆', '张量逆']), + ('combo_ctrl', 'mat', '矩阵 (numpy数组)', name_A, names), + # ('combo_ctrl', 'B', 'B', name_B, names) + ] + self.panel.set_items(views) + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + name_A = values["mat"] + calc_type = values["calc_type"] + args_str = '' + if calc_type == "inv": + return "np.linalg.{func_name}({name_A})".format(func_name=calc_type, name_A=name_A) + elif calc_type == "pinv": + return "np.linalg.{func_name}({name_A})".format(func_name=calc_type, name_A=name_A) + elif calc_type == "tensorinv": + return "np.linalg.{func_name}({name_A})".format(func_name=calc_type, name_A=name_A) + elif calc_type == "transpose": + return "np.{func_name}({name_A})".format(func_name=calc_type, name_A=name_A) + else: + raise Exception(calc_type) + + +if __name__ == '__main__': + app = QApplication([]) + md = MatrixInvDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/matrix_numbers.py b/packages/pm_calc/fastui/matrix_numbers.py new file mode 100644 index 00000000..7d994962 --- /dev/null +++ b/packages/pm_calc/fastui/matrix_numbers.py @@ -0,0 +1,48 @@ +from PySide2.QtWidgets import QApplication, QMessageBox + +from pyminer_comm import get_var_names + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class MatrixNumbersDialog(DFOperationDialog): + def __init__(self, ): + super(MatrixNumbersDialog, self).__init__() + self.setWindowTitle("矩阵数值") + self.combo_box.hide() + self.hint_label.hide() + names = get_var_names() + + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No Data found in workspace!')) + return + else: + name_A = names[0] + views = [ + ('combo_ctrl', 'calc_type', self.tr('计算类型'), "norm", + ["norm", "cond", "det", "matrix_rank", "slogdet", "trace"], + ["范数(当前仅支持2阶范数)", '条件数', '行列式', '秩', '行列式符号和自然对数', '对角线和']), + ('combo_ctrl', 'mat', '矩阵 (numpy数组)', name_A, names), + ] + self.panel.set_items(views) + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + name = values["mat"] + calc_type = values["calc_type"] + if calc_type in ["norm", "cond", "det", "matrix_rank", "slogdet"]: + return "np.linalg.{func_name}({name})".format(func_name=calc_type, name=name) + elif calc_type in ["trace"]: + return "np.{func_name}({name})".format(func_name=calc_type, name=name) + else: + raise Exception(calc_type) + + +if __name__ == '__main__': + app = QApplication([]) + md = MatrixNumbersDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/templates/dropna.json b/packages/pm_calc/fastui/templates/dropna.json new file mode 100644 index 00000000..67b64101 --- /dev/null +++ b/packages/pm_calc/fastui/templates/dropna.json @@ -0,0 +1,18 @@ +{"file_name": "dropna.py", + "operation_name": "Drop NA", + "class_name": "DropNA", + "params": [ + ["combo_ctrl", "axis", "Position", 0, [0, 1], ["行", "列"]], + ["combo_ctrl", "how", "How to drop", "any", ["all", "any"], ["All", "Any"]], + ["numberspin_ctrl", "thresh", "保留非空值多于等于此的行/列", 1, "", [0, 1000], 1], + ["check_ctrl", "use_subset", "Drop by subset", true], + ["list_ctrl", "subset", "Subset", [[], [] ], null], + ["check_ctrl", "inplace", "In Place", false] + ], + "rules": [ + ["use_subset",["subset"],true,"enable"], + ["how",["thresh"],"any","enable"] + ], + "rule_widgets": + ["use_subset","number"] +} \ No newline at end of file diff --git a/packages/pm_calc/fastui/templates/dropna.py b/packages/pm_calc/fastui/templates/dropna.py new file mode 100644 index 00000000..0b45f870 --- /dev/null +++ b/packages/pm_calc/fastui/templates/dropna.py @@ -0,0 +1,68 @@ + +from typing import List + +from pmgwidgets import PMGPanelDialog, PMGPanel +from pyminer_comm.base import is_pyminer_service_started +from pyminer_comm import get_var_names, get_var, set_var, run_command +from utils import VariableSelect, input_identifier +from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton,QComboBox + + +class CLASS_NAME(QDialog): + def __init__(self, ): + super(CLASS_NAME, self).__init__() + self.setLayout(QVBoxLayout()) + names = get_var_names() + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No data in workspace')) + self.close() + return + self.combo_box = QComboBox() + self.combo_box.addItems(names) + self.combo_box.setCurrentIndex(0) + views = [['combo_ctrl', 'axis', 'Position', 0, [0, 1], ['行', '列']], ['combo_ctrl', 'how', 'How to drop', 'any', ['all', 'any'], ['All', 'Any']], ['numberspin_ctrl', 'thresh', '保留非空值多于等于此的行/列', 1, '', [0, 1000], 1], ['check_ctrl', 'use_subset', 'Drop by subset', True], ['list_ctrl', 'subset', 'Subset', [[], []], None], ['check_ctrl', 'inplace', 'In Place', False]] + self.panel = PMGPanel(views=views) + self.panel.set_as_controller('use_subset',['subset'],True,'enable',) + self.panel.set_as_controller('how',['thresh'],'any','enable',) + + + self.button_box = QDialogButtonBox() + self.button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Help) + self.button_box.accepted.connect(self.accept) + self.button_box.rejected.connect(self.close) + + self.layout().addWidget(self.panel) + self.layout().addWidget(self.button_box) + + def accept(self) -> None: + + code = self.get_code() + if code != '': + run_command(command=code, hint_text='Drop NA, command: ' + code, hidden=False) + super().accept() + + def get_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + varname = self.combo_box.currentText() + values.pop('use_subset') + values.pop('number') + + args_str = '' + for k, v in values.items(): + args_str += '{k}={v},'.format(k=k, v=repr(v)) + return '{varname}.fillna({args})'.format(varname=varname, args=args_str) + + if not values['inplace']: + identifier = input_identifier(parent=self, default_name=varname) + if identifier != '': + code = identifier + ' = ' + code + else: + return '' + return code + + +if __name__ == '__main__': + app = QApplication([]) + md = CLASS_NAME() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/templates/template.py b/packages/pm_calc/fastui/templates/template.py new file mode 100644 index 00000000..8b9b0a01 --- /dev/null +++ b/packages/pm_calc/fastui/templates/template.py @@ -0,0 +1,101 @@ +# -*- coding:utf-8 -*- +# @Time: 2021/2/8 13:01 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: template.py.py + +# -*- coding:utf-8 -*- +# @Time: 2021/2/7 21:00 +# @Author: Zhanyi Hou +# @Email: 1295752786@qq.com +# @File: datamerge.py +code = """ +from typing import List + +from pmgwidgets import PMGPanelDialog, PMGPanel +from pyminer_comm.base import is_pyminer_service_started +from pyminer_comm import get_var_names, get_var, set_var, run_command +from pmtoolbox import VariableSelect, input_identifier +from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton,QComboBox + + +class CLASS_NAME(QDialog): + def __init__(self, ): + super(CLASS_NAME, self).__init__() + self.setLayout(QVBoxLayout()) + names = get_var_names() + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No data in workspace')) + self.close() + return + self.combo_box = QComboBox() + self.combo_box.addItems(names) + self.combo_box.setCurrentIndex(0) + views = %s + self.panel = PMGPanel(views=views) +%s + + self.button_box = QDialogButtonBox() + self.button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Help) + self.button_box.accepted.connect(self.accept) + self.button_box.rejected.connect(self.close) + + self.layout().addWidget(self.panel) + self.layout().addWidget(self.button_box) + + def accept(self) -> None: + + code = self.get_code() + if code != '': + run_command(command=code, hint_text='Drop NA, command: ' + code, hidden=False) + super().accept() + + def get_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + varname = self.combo_box.currentText() +%s + args_str = '' + for k, v in values.items(): + args_str += '{k}={v},'.format(k=k, v=repr(v)) + return '{varname}.fillna({args})'.format(varname=varname, args=args_str) + + if not values['inplace']: + identifier = input_identifier(parent=self, default_name=varname) + if identifier != '': + code = identifier + ' = ' + code + else: + return '' + return code + + +if __name__ == '__main__': + app = QApplication([]) + md = CLASS_NAME() + md.show() + app.exec_() +""" +# print(code) +import json + +with open('dropna.json', 'rb') as f: + d = json.load(f) +params = repr(d['params']) +rule_widgets = d['rule_widgets'] +pop_rule_widgets_setence = '' +for w_name in rule_widgets: + pop_rule_widgets_setence += ' values.pop(\'%s\')\n' % w_name +# print(params) + +show_rules_setence = '' +for rule in d['rules']: + r = '' + print(rule) + for text in rule: + r += repr(text) + ',' + show_rules_setence += ' self.panel.set_as_controller(%s)\n' % r + +code = code % (params, show_rules_setence, pop_rule_widgets_setence) +print(code) +# exec(code) +with open(d['file_name'], 'w', encoding='utf8') as f: + f.write(code) diff --git a/packages/pm_calc/icons/equation_solve.png b/packages/pm_calc/icons/equation_solve.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea2b358f95b3c5da734023c270ae0fbe692a311 GIT binary patch literal 5758 zcmeHLXIB$Imkt3#kPcF$1}RDhm0qKCkS2n3BoIIdy-PKb-kTs*5s|8b^j;%HiXZ_J zI!FmcItGx9@1CNPleP-@+=gysSC)QA3llnT_bpQZBt*xbIOl-gXD_{_@ zu6kNs001znYpX#`0&RAzDYH4AWGa^iM@1K=`1%1GKl16B8FaJvGSTt%s;g!haIx8# zLlo19(3Y6E7ym|0QDYpBb^bS9IyElJ!RG4bW;JL5Wqe$x@3E>s@{R++KTwV9p0!iQ z8$Ek)dQ&Nv(uB325Z!|U9JK-*F%aen?ij?%6u5}L+-fM9ig5jp*gyz7+mIi}gzT-<7%6)K zc78VO@;EIiqlU7{U&xe-p_c8#=s@go$vpp#>1S3x4R!A%Je{g!e}=X} z9SxumROBIyeLlo3VxPiF3!Nxa21bNe8E8{xSfAB%-HwTct5Pwf1Jhrh?jQpD(`S9b z4y>QAI)Qi!QBwfpNCYdN0L8H5ZjN2&F~RpNyXG*VHbFTZVlny;Nvch1p(4>~_62`! zb!S;sR@XGi-DW}d@}V{xX-PUsW_`(=D$@F7C!Ft5*m1DZA$wK5r-J;&QNtdrWs1og z4_$SyUAA54%~Ac2K2VZR=Il*1-(qQ|ao%#1u|mhMv1Af9#64(lCvWNh35rs0HX$=~ zpUz?~9pXJlCzD8OQCa0Col5{h)C%K9O#GqYAI5Jp^vX&?K(SiB^~PAz*f6x#J+()$ zj{apXnygfP$VwN{@>@f4rT+3Hq0y9~};!^#}b?H67NK-ExKN&78 z?V~8FBATt1(c_D|0!7en{(vlP9vlCKbLyWou#noPfP=G#aC2P|rL2OWu87dd2Y45d zDFo3=VHJI5!g|4$UU(_Htzn9q%w zC+4cvpWFKSgKX>_i-s-FnvP2%HENR2%tk8RGsVjQ>H$kXsTSW2m3DZ{ARS3m^&qX# z2iHXQ+uB+dcv0hSS?eo1vrzC4*s_=3l_6QIo%MVfZp4r0{whoIm7i#DN=Uh+Bh7ML2KlD{Uc#8ny{IpkH?Ne$NQG0R9fgWs|po6MxY1pKeX?g*q+KwrM(vkpRbJTkG(+p z5X3Oil|{0+J(ZNj!Qg>rS-arKhMUBhM7(t1#HdHKN>e2oRM?MpJSS4P{!_A=)7-l7 zJlH0azGkH7tBzuj~};Zml#*5U5T%AQLJ7}m?{)Z@p+l!+|l%*URM6m!wB z;2TIXJ0;7qe3V*3!}6Jr<2o&EO0dbt&B=E>lvq+qaKwW7-RBA)Q? z?beM=CXyb2TVDIHCGR2YT*W&+-aM)uuO;C!%tsg8360>--i?p`>yU8h`T z=oUH62Rnz@<|Z$yJQ*OMn9*d}`hHx1`A!rmK)Go9f+yr+*k&r4EGg|~)+rfS$ zPgo(mrr{o2y9-d3va>wh@`Rokc$c@p0hhX>h;!Z`-nq}YNq7}jyCj~T1)5-Ft*zz# zTCVpW^t<$npg3k*`#%h0q=RC;eoaQO7=qBd2FteTb8?V09p47S#51R~Lhs93Y>)?A zGVooP#D{R`de@g@^(k6XrU~dG(NQx1Peeu2yM!;glk8}KicxsE8~&T=&kP^j9z&;< zdzjkZCG`6npK>#X#aFG;X{VFV51VffL&7vI&awm2RI(oP6WL4ZC55(e>iT4aWV4-vfs)fEE_lkSd)9563ZB{Pg#wy}iZm_<3<*SSQ?kAE(2n}uxe01%9 z^W#WmGs5VU7=Wfg*;hHyemw<#-p_efuI z-t<)M4LY_DTk-Z%m|N5jJ%6-CuDWx_j;yi4-Li1`YdW9aI{SNLB@(c?$B-b5a)r9)ugLOU%}+mm4vIfUIz%2)s|ugrFn z&VrX(|6HCjPv^U4#21ZY?*l&uft#QuafcN@-uAr``vN~f2UDCp-3GY{0|#+6M+I~O zuLN(fd2&bowHeqej{aN-T@3&9j$0!+FjweTQ*y@bxR+UVxnShkg6@kb4Eh;GmqM}o z>GRi*a$C1It*MG%F!7eM9YtMdRC+4D-pCJp+P~pJ_ic-6Xa5>6Ma9WeO8L3z0xUi)ob};TE4DrCalLR zyc1rREXlLE)<>iqv=qhM2$joP-x6#jow(AHpS~o?Opev&21)?~B z2kDZY>7lL30kcNkpr!3dW93N+f+@EV3Azlik;Lk7?-_$r3a4-#Cn(m&o-;zr*0`_R zOu7$lb`(yRJAbvcOm9a`4YkR4Z7c85?+vT9QUIr1&=$Q!kS&<-;}5%Drp4>$L8olt zPdrFF(~oM#izQIe9>FP2LqD&@5T31)d3qEllJDhY&d#ac*wRo+azP&90zkKNK!TVg zGQRmSp96j4l6kDmw@lF%6;-mGk53*nHX41ccGJv(1x}uSW_xMwS$%A(FeOtEs`DN? zRj7_*d792nJZ+f{52aHId~h-pcCPtguFlH3`eR*A_tsM<;X0+1)=U8FrXvr%_52;C zTLzs<^T+5p8++YTPbbAAjr0!W350leivMYkbZ{mp|<6Q|IK6 zB-#2aovJcCER^(%T!qbcXhyUFv(PvwvSfD(&T_V=CLrl>c-st?VAH39=s>^;%h>caQ(0S$Ig4JS$ zTmyO00wSW9e^kwVXdjT@{SN*eKp>2fzI4g04k4~G8UhR`i;`bjtkm#oC_O^(lcxqE z&x~`D&M5)eoY8J-{XB^b;qVOES)6f_Rf#`{e(sywiqByEyi}m%bi#gM3o)aizdp?6 z2M}Qb4P;rfr#4K@Prn)G{yBu4up8LL(bih{gY|4qaAHwQpKN0iG9&jfgCoiE0n_hY z3-SvF94zL*M>|#6YkO!nXo!M|8uG!_2q>Wz*TTX(z&!H(|U{s$xS|Y zu@9F4EcVj_V0GHlij78jU-}~BNp6Qco!j13KFaj@ASp1(PAg!6)exep`Fpp*Ulbr& zV4S!{D{q^5-PWUukFYI=&ezSO*ok_)&)hU1x2pq`HCZ4?ENeJgRvuI4{F!CWVnY(& zOh(`vF3)u543_r|<;*s*GrTZ<;OguRn|^J=S0As(Af z{GDSzzW`3cfm{pm@LA$VD43K}r3quic;0(HM%}`d#AS65@F>KL&JG{na^({soxMh{ z_J~LA&FLxIThGk&Q=hS1Ut4u&(Ho>P&ex7Hh~~T6%S43oI=HQV=B)lZm-NsQu@XM7 zke=#Br#NjUS`#+f*-n~PbyOI)I@g`}uybY0|1Y^!Na>QXBb_bBE{bZ8;YS2=@_}$Y zOA?ee!>Uh|G4gvX?>kEN5}=1%oe=|w6>|;sTMb_EOJpRJrgU#7N;@A~qkkm`p0A2T zK?0$f2i!-uSEz2VFiwlK6oSa+6`z1RjMd}M??0d9g6FTFJaAJ6ky-BR6jfwc+s(K9 zzFSWz19 zc8AqMaV9a4ETAjDQA%nkR2Psad3$DlT3|WkNkVvn$%q#x@Q%0ZwVmqp^r++6jocHG}MIowhTC+pr# zxDdsY7w=@L8Y5Du6W-{~?Yw2DAsbZ~J50#@?_}+5SfGaPjTsS_dR+M3Zo@rhZ1-^d z;D}F$0M$=NpQaY}`}=nyer1{Ua7KrrwnBO#l3Hp&e#IGL8k|=3$%G}9_)GBrg8v)- ch`b^XnMmSwkIeuR|CIsS>iTNc5A0t47s$4GH~;_u literal 0 HcmV?d00001 diff --git a/packages/pm_calc/icons/matrix_calc.png b/packages/pm_calc/icons/matrix_calc.png new file mode 100644 index 0000000000000000000000000000000000000000..47a51e9aada8d1fbc0ae961c6c1754776ece4b63 GIT binary patch literal 3802 zcmcInc{G&m-yhtX8AUgP5;0AdFi3W7b89ez8HHpg%91S&DN~l4GNc+5*`pzfY-7!m z9-(X*TaOaaX3t|MdZ*_-=Q;21kKg&7^S zAelt8;J({_Kd5cowaDgKCITUpO(sHCSDa=tC_WBnByKj+hQ-nb+^TLRlwlh#Tb=*& z$&;u)qL`?*3O>Kjf+>)5+hYtD#B&QL7vIJ!j!oz=D}T8Cz-dF-=I)!}eGkM)fHppL zRbP_Vk-e;YzUfH=a#)wIt50JgBWvyht-J2y`r)u{x^x!ZV>V9g6A~b};CcA9u?XIA zGy$9z0v`|%unRpL0W?V?cn` z?d95(@tc}yEyG2)IjTniB}F6%*XN3D29~5cFO%DzVz+PJKEt*y7VhCYrV!IW2sb5Q zf`W(E$bOq_eSer8@=B7pIL79gr-LZMXa;mRjMJ*?1fi!E553V!n=jvuO(hQys4=Sj9nVWkqFFX5pO?-$j*jTK47X?J|(+OCBy&`qW$H-(n(4lG7ku&JqA zWUH;T;e%fcW;fGRyIFBfp1w--2bxEzu|g^A-qeu88Fg-)yeAbRtbXM!D$%$m@^qr| zT((T;>ZQ=g_wq~nk9O%EsoRsdr`y_p92XxF^ZeQ5&PA$%PAK1d8|K>9*HgJca;T}+ zmBVR;kmN}K`fwt3PTVm!zjK!S)Lc;CROinnZG|@1;w!bX>smDC%C?!Gi5){JN|D&v zfDwABZu)g%m__WY$CCAAw;)yZSHx-hTVqVt8ZKsHh!+zh)X%{?-w!y39 zy8e-$a$cKqRDYAF6*FBNe(Fp~3)hg@ma6*}BOZdV_qWmqSd=%CqLMo2n{LS($P>5b z7vJcy0fF{d*9*eBRKsQ^=2sMCqrR$^AT;nRZhZPw>VBX=F?hno+s^vO*<3vX=4kw^ z;DNn9ly-q*g__1Fks}tUF^nE?mQy!(Edbwc@-e!y%xtIif}P9=Qz$8>X#PA$Dp3#e z+kVLSjBbo~&QiwZ&~!`X)BE=p_SLyfo%vfqz`rOMlWtbHgnG$}F~!U0H^0H6G)|&k z0{3ksfV0~Kpa%~{lq0bngncNCmFsyhO5y-;7B(r|0UzYMfi*iBa~}fTAA(V6rP4#F zmpeq^gOHr{Ht0cw0r($aoUm$2{+@@bd~sy3Q%F}7VFol3n+rmNa} z-RU{f>CHZg;TTj@I^T3i#uhnc-#B??Zs7BRzR^bBYv&C&_Q|>U2f-+)BPGC|z~m!A zO!WKKF|`p-e_d$L)~f&zfOnurfhM%bPw%jc@F?)fX)L7RkE4uTamdRs22emzndCF~ zwvFh!1$y}fs6{7VRrv*u0i{5z=gq%AgXvgz9YZ5yx$$CVAesv5z0`$T(y?~u&8uC` z5DQyRKS4OO6bxD4eR5GITGtc*=r~GzuGH%|Y5(f!|~s&_6kXsrZ8Gr_d8BA3)#2<{C zn{uZx{7!!S9aZ0^bwVqzhFg^uz1B>j%DnUZGS=MsLQ7A44CgcrunR~3Frh_ZoA%$p z9*aK#W@+x9G}V8{NK(=l^SYx85yvG*Y645NRFqdsI8ysaKS%*FU%0hBPu9q3U`5{c zEXc8p|H{A+HIF&ClE-ggIZ@t|&ie0ClfZ_;56dqN0f~iJc@0Pf zMZ%P-=;X%ER@A`ZHq+KJGTy*mjR4Q-(rs(@z1c8kOpli5j>@hE+zU06XVU^Q? zN*t*Gn9-usK>OET7is7A`dFen@j4kP*<)e&7}qJR!0^0Q-JH;}9b%ye`x^gANdOGo z6Xg(j%oJlcfY4(Dt zNT1w>bVhMtiO4nAY0Ff%M?iu0LE%l9p(;4ER(^~xaeCw7RTJb?BBkRxndTFR-O&DV zP|ZJqw0zW$#r>&|WPbGYC%MdWpZf-k^@jMhx?H@De# zoqM_MauTs@&g+v2a-)=<>6HDrQ!#18J0}SBk`!4QQ6v{XomR>om8tQCK-?|=KVy~w z^>;5?xVk#yA3bS8AIcP^G8Lb3&KB|laQp^Nkvt6tZ#i|hU;8&07r}jdZc6^&J zEM9T>jVz_LUnO0=mjsFvnq`qxE^N>NykG3{qXjv#&m{tg8Z%_RmwY`hTktWcabfm( z=NG&FmiOoT9sde0&XRBPmy>bCJH0B~h}=8#)JED|#9qDm^9wYLX?~9$o5*Z75{XY7 z51ZoJrH!eJJzwrPtX5@aBzFJN9n9y3g;(krM9|d%`;B#fW&^a|Le9pOa;3&dP)WgK~!cS!S9kQGq4$G_OlVnyoDYW1r^ZH#czA zvYaOEtG#I*j;U_@`RDPi2k$;iAR)cWUZ*-Jca{dgsMo>{A`>oYbrY1Ys-2~$U{t%X z6?cQ8ZJX$wtEX+mBwPX#iTdw)D0ls}$QxcxGR4*@TiK%Z3TPFSbg;P9ni#8~)bm2mzgm4##uV@wS(2octt~ zI&GzYXOpVH_+(T$^umm%XgyON4Mbp_fU^#MdcLEI3A#&1$s$}~b?8Hoh??Y;I9aE4 z=_)~k?J(Di#f-&GNuP83>BBD)uFJ@hJ)u0uzqFQCI8u@eC1Y(z$xE}9E58Ei#v<_z zQ=xsV0$#H;9U#RhKf5tms509o?y(9tb_xvjCXyrxDLGMAZ*Iy(+IeY-;u8}tSIa#^ z@Bahc=zxZUzT!`Zt}5yqGSv5HnqWO7yy0NowQSL#$G4(RRtKT(iwg4aUGCbam&^ ztxxT1g49iXKLI@MRaN_nViCybwKrPqus-}t@bP6EH&s&b!aj?2nGX;>ucg^;ecAy@Q%P3k~uyp#+yb zJd{QEO8d-VC;J-hqJhsVANeJO8dleD8(*&2%Hga_;PfvXQtX2f(S)UgcwtA5oMSDQ z_0xtP3^34TVYr3O&PO!6uv#m2zG;0vDePrnPChasHaw?BrKo+1RpuSp#i4j9K|s6{ zu#V(Wby!v3v-dth=i$)OAbChZ1f(0KTT!IDK~g|c8l<~JIz>7J6r@2qBm_i|G(h5R zjPLh(?tAYa@9%wQKWDGco>?7w*J>{|FZzc)Xc>M93UnrzGdR*>z}6h(n}L@t*aM`iwZCcs;NLZMF~4zT51cZt5&)pBU0xos z0{})k0Gx+jUjEFxygbhb0N4xwbSC_(?~nj4=NFJ4`!A0v695PT0pMl(zdYkY0B8i) zn0(36$l2)E_rSnA)Z82Z4vPT*Pagn~;96tf|9_SLUT@I$m3<(88UVDs0pRWs0Hme? z05kY~1O}J$fHZ&xgTvu4H1LLohK7!Ti-`de0S*opE`orF2tj~AAW5mnki?WE2n0Dj zIVCkUEiEmQjDd-PhKY)XmgdR`1XRU9$H2$L#HS%f5Yzl$(`7e+z=Xs?Vqp*l0E&RX z5Rl6r;2QX%L(m{s6ZlK$5EvW{0}2W$!9asSuA=Q90!0ug`sEye3xfbqLKq?F#hsjg z#Q!;fNDazM7cy(K%RYZB8}Z?fA#9TS-?RXLRr_gGz>`y6bGE{gKKUwyvHKjDH3JZg86F2B4Dw~r09XqyjR@H~qYY(I9IX+Q_82 zzXl>zj(Z7+1x|w@_M5r}k3Nrn{kskf_idLP;_D{k*tE}!7EsS<^F%cw zxpsjXgFmW>Fj4ySL^BJk3!CkY^b38jZ|-W+g7@^j6FVNim~;i8!8%{n`QJE(ofbsL zV~QSTVFjiIq^3z^bnv0zg{w&CUv;(8fH+SLiW9@EM3SDRm^RPcJW%AdtVkN7-Z3=O zbF?+t|FwejMoJ-T(ivdgzY>*%OsRNuu5r@d1Paa zk7m6Rz#tZYKncISEovv#XU%x6vc8oyE~~jLTgy|oT-KCAkyN+z`^P65Z%7L(MW;Az zBPa_=^-E6AfoIskDYelm-90naK{cD2dW8p^pNR*nLvptC(!PoNL`__zv8s!ZCk6zD zzYml;hgGHNp36A(bu8Uq&-ANpJQQy|_p_a9g&8TroH@-mo(&S*Cg#Wxv+qL&rLiDk^KE(W7YJ39vb z3=F;cUK=5uhNAZxUQ(Aznh2;y3hTVV!pGc2!C&pO-9tSr?OAP5pwdVx+1$ z$2k$e)f)~4^Xi{4fk0sZ91TIw%SXh6q+^gIl#tSRM51ow`1IF{4rViP$XOd_(UYVQ zTBmPgHLqxu`S=cLnM?K7*_W|d^p$1phz;ap{apoaUc=3BEsGGM``Gwa8aBAdp)(a` z&%fNCa!80DQsww1#=zS>4yRG+eMRkjkyKG@2#s7p@60~&_qz67+1W;Mk}R#+(%UL- z%l9HkqM9OKP#c&R)m#(D{SnsaP9PJEd#F9kbhwp9@2 z>nZ)oJ0i7%X79@U2C1>BVq9}!VjpX-uZ!aKTYFp43GwXC85Nvv%vBa0m=4RM&cQ_e{$f z6*1X?E^9B9Hn7;9b}qcUn;SZRUjK58Yd}n}ag|%jIZsh2>x_&5GQ_@26s~+tdLzkW zm7=LELp^(fCYy!2C(e=oRr%{DmL?dBmaBU^4a|%pKR?REzqkkmeS`Yt8#oLT^vG`l ze}8`ahKPrc5J^nOAR(zC^~lK4>6dGuSFSm4tt1vn^jLpV%8d|D#0s+$8#YJ3k><;S z$orIxYoT?*U@j1@LpQp7Pj+tch_{^DC2mETR9d3OMerng?5GP8lh))znO=^khwyj_B-Q`-Ujbhm|yX{;d1TEJ)tbHQ@)_svC8O=@P<4>0#ww z0>uw_7d7?VDqWV6g}0|@X@_`CYgf3s_^6BW4h~LqWBle?T`ned@i^bT93Hs8En3RR z$(Xec%V#KF*?E{>?wJ&CyUwfg!!e|MdbS3~LQCB!JhRlXhOu)Ev40nT z?AV{ofG!TbC?=14Ae*a%ixsh8T5;^eg|C$>lCBcBve7z^nn*`YpQd`>EQ!-=J`UIL)9lrt(^KBVddrP@**Q8Lp?5@B&-z#WZ~h} zKMfTpLR4xGa=Ww%$hnP^=!ecq_1?t(Xk4u8Ia85=o?AmbtYlmh$vt15eVsJ6pg4RX z?Yg(pFcp?$*4KXt@BonB?+XR|xM-0LWXCUhoSbH0E6rgzq(6DZy$v!TRJvz+zTpv+ zlw9Pv`a&9WB=yCidK=xSUdj9nEL8 zH>ENx$kKx)m99}PJ#fwAx#gr8u=?7m9JR)N8WIT^;$xI5Tq3z;C%f3CsZDN|s+G4% zeNd|robKM8kEp!_)ZASsKkAHyTh(6z<3%U6)Za@9=Vfds8TfB8e7hHXs#kpN?ztUC zf$UE3U0R*Vr8t~gW>qr3QIp)}l5#%BxjsYq0+2(TnTYp+Bnn*@4R3rydOcZ zQ1nJ%Ax2y9m0+s2aOzL3T%H?Y6)KGHnpRSG=8I#{=<{t*9_dPP6~)@KH_&CVd9$^* zoAEbDN>H~WlOKt`s}}n>L*QJ8mYJc#oIN4zqSk+kd)PcdS& znFEx&RM>iB64TAx_vRxNLL}IvhZ;i?t$L2wdvv{W@vo<3V=$p zg@0I~JenocV4W>%jvQew%@G+cv>J367#14&p%K#8nCwsLZuCBm$5hJZ=N$FOYsLO> z!Mh$dE17SuABg3zy!v5mPx+c5!us0KTi#}jP>o5qmB&NJ`ZIMOMoXkEEia0%YCH}? zuyVV~e;9vjJO~2drI%DUa*}vTNS9l~qZZdSwtukV|F_H&r@sW^gDd97c&c1?w3zq2 zr)s2?G3XEXZ&3AnWY~IJ4qC~?$0TiiFLIJ?4Kvrlpm`w28i<9i`u(U#Ttelr_uGA|C-*0nd4^1b`Qu$vXVZ$|`Grq$Jw zhZ6z@km}YZ-l#XbQcOvQBcV&0xZGQ23M!o+PJOV@Uq3xAQJoHC?_T}zBkY|?&CP|v zc}ms7ZLz6a+R+TAuVXfg&vg<_V(_gW7Dh92lamQiw32XgEuJ5iZ?3+))B0gAQ?42{ zlB@&x%dJVtynQF=utNNP22Uu@3<6mR5=AxnvYq1F8@S?1^J@{tep~yoJ=I`9B!*3h z^C+;}60d!7>3M>7uc1JdWc7YuM_$!d*(p0-XcCFHXD|i1O~CPS%h%S(dOtDc8vms5 zlqlolHX~A}dUE%CUZGUK2D++d%0Z;m?W~-jajDrCd3x51pK8}gF^ogMvu^yFiu1`rRsPLTp5>8(}ri zgF4N&fHyH4p|Q@w7F$9B(W15|zScUjnTKxp;rzHiyT!Xbl7^m)5XeB&wMMj5V&u+@pDb`=G?6cP|{^8 z1ipDQ@)+{W1z+eR(>xUTFq*#S;yhLqmYYUZqN(WX%QuiA@gl+-!WMX~H@*tNAEl=K zQ0Uon-c?UGi#f@`d90NQ)hM4NVI6*Vu62SN0&5JqQw)51PpDvbrxKC?maCvUj@ICLot;DK>9EBnOC6^6jt zP=RujVU4k&D@gCRNqOHEFM%N`%)x^Pr+XgZbJ@&U7MzT1pRX&1)-i640s{G?hmNW7 zdgPes{r7UK>fHc|L4K0ym%NaiBi zB(xW$>=kF_$xmT*KThl>4G!y&wja)Y@4@#a$OI1Wwe+#-1_pk7>)&?d$(D|JGHTxE zj9iL=ulw~cgMt6+sODGd|9d>}ry%>!8aTo4(>qXG68vD_@|S@6)BUl9bCh!f0Vh<~ za=JSH{6+8`H3%H31SkG?Ck<#p?(pzL6K)&R{pkdtjr#wBkn7!lSP=5RGT{H%G5;g^ zj{%(SA62zK2-?~C8&Nw;{9!>-Zsm3Y5WIWIe>nh<0C$uihIA5k{^i`1X_**ki7e?jDZ2b0WGW=HS)*9U6csilgCm`_phHQ{~cq2Ojs)V$zmuF9g%s zBbmQ_40JpG`>O4lE_j0e?M<>y>|LB+VuJ%cU7tZS3!ODz2EFZpwn&M|Z zqKL1_?i4jZ1rW-4&D%44Z?0Z(FsWne6@6EE<~@uRpCotjgrzWp<(}Itxvc-W`|J%& znT}F=rZ_(4{H(<%uJ3dt$)PAy-&QRv^U+90oCDqJk zG$X7v1M3q#5N2=blytouG)Ixca5vlt&t)vuTswR3=A8+%1B*}ZF`zYSJ!SZse^81wyET<3d;l1|FhmEZ0GBH7Co;{a9=HChn21SE|o7dkp)}O$VxN^-^ ziPg2wqvpRd_B*n`C=@5W1Xy5^*^v-8SDg9^6~(dw@@cL~E3WTrm_>vcJuQ*hOxe>Y zq6zb7c4KC8I;dT$^ZRU^&#&RgG!7@u#76PX(@q_&7nnGwQwrrK~Uq z{`AAiMc4K(?0KPt9>%n%aXJbWDzpqY_qXVEyWu*PhyKE1NO9AM$g{xO>HrJAim7VN z&(zH))~y{Be#?m6X1Uisf171kro0o4@*SW+^m$-8G`jCD7Ag5KOvn|E$*j%QGRY}h zzLMl6C@_av8vC`|s3@xz?io}4VCdmVecA1cz#;a6(%Le&3rQJS zL>zx%LelsNci?&%Ud~I?&atn7&nTmSxSLj0CCvJsuyv+M`q`WT5nPg2j^!9ac5+*Q zB^)Csmg&y)dxwwX8J>c+EHLS~PNR2*Qbs}o6a=`k$u?Ep9(8Aqk8a8hp@vSf7ba7n zxJ5f?ZN%^|!G}+TS1kF0N*F3l9|P& z4A8<>`z{~4mzN}oCM$-Ni+M-K`MFlC}Ak_*#W!fCx2!H#1a;oKK@vy#Sd ztuToGIW}n|^K9D*&leZ(&0)=^HKD(1EK707gzl5slI=>}^w;JzMxjn)8ybW>936K} zFM;i(DPGR${id~NsWP*{KILuqO~F4ipDh@xDHHaZb2&uJ`l($R~D`BwFHMIpIm@ zvJzlI>a`~T;riR$nn@~j(aheegdaX8Zv@OO-TwpHjt2TX5XL3v@#@=mYp%m@Zl<jjPP!Asjb#_{G#i>s{HFRBnri_xe{}7wGb` z<%$w9Y4*}eV7MLI9^urRGdoa^Ue+KkRIXu&A-xfqO2`&6UT+x&-^3-uY*UPB579G` zZ>;S<09Hio0*On1=4=mheKcp^k@`qC!KjvU*WBZdLC%kC?Nhib7?X2+@B7|fCAY@1SQ2o_nF;0qw%=} z6smRaj6cUN(l%(H=5Y03<@WHnc&Wmj5XL;{Lcg~gMp8Q(shaTkqMm}DOBF+#=kU`G z11?(sS>foJ7RK2L?evY$aj_fQ`kr%ze59%QL->rNjA;qGs#rx-EnpB`s9ete7ZvL> Awg3PC literal 0 HcmV?d00001 diff --git a/packages/pm_calc/main.py b/packages/pm_calc/main.py new file mode 100644 index 00000000..a059a839 --- /dev/null +++ b/packages/pm_calc/main.py @@ -0,0 +1,169 @@ +import logging +import os +from typing import TYPE_CHECKING, Callable + +from PySide2.QtCore import QTranslator, QLocale, Qt +from PySide2.QtWidgets import QApplication, QDialog +from PySide2.QtCore import Signal + +from pmgwidgets import PMGToolBar, create_icon, Dict +from pyminer_comm import get_var +from features.extensions.extensionlib import BaseExtension, BaseInterface + +logger = logging.getLogger(__name__) +if TYPE_CHECKING: + from features.extensions.extensionlib import extension_lib +from .fastui.matrix_calc import MatrixCalcDialog +from .fastui.matrix_inv import MatrixInvDialog +from .fastui.equation_solve import LinerEquationSolveDialog +from .fastui.matrix_numbers import MatrixNumbersDialog + +logger = logging.getLogger(__name__) +if TYPE_CHECKING: + from features.extensions.extensionlib import extension_lib + +file_name = os.path.join(os.path.dirname(__file__), 'translations', 'qt_{0}.qm'.format(QLocale.system().name())) +app = QApplication.instance() +trans = QTranslator() +trans.load(file_name) +app.installTranslator(trans) + + +class PMCalcToolBar(PMGToolBar): + """ + 矩阵计算: + 基本计算 + 求逆与转置 + 解线性方程组 + 特征值或者其他数值(比如行列式、范数、特征值等) + 矩阵创建 + Sympy符号计算: + 1、 + 2、 + """ + drawing_item_double_clicked_signal: 'Signal' = Signal(str) + extension_lib: 'extension_lib' = None + variable = None + + def __init__(self): + super().__init__() + self.op_windows: Dict[str, QDialog] = {} + self.current_var_name = '' + self.current_dataset_dtype = set() # 保存当前数据集中存在的数据类型,确保不会重复 + resource_path = os.path.join(os.path.dirname(__file__), "icons") + _j = os.path.join + self.add_tool_button('button_matrix_calc', self.tr('矩阵计算'), + self.tr('矩阵/向量计算,包含加、减、点乘、叉乘、转置'), # 矩阵计算 + create_icon(_j(resource_path, "matrix_calc.png"))) + + self.add_tool_button('button_linear_equations', self.tr('线性方程组'), self.tr('线性方程组求解'), # 矩阵计算 + create_icon(_j(resource_path, "equation_solve.png"))) + + self.add_tool_button('button_matrix_inv', self.tr('求逆/转置'), self.tr('矩阵求逆与转置'), # 矩阵计算 + create_icon(_j(resource_path, "equation_solve.png"))) + + self.add_tool_button('button_matrix_numbers', self.tr('矩阵数值'), self.tr('矩阵特征值、行列式、秩等'), # 矩阵计算 + create_icon(_j(resource_path, "equation_solve.png"))) + + self.addSeparator() + + def get_toolbar_text(self) -> str: + return "计算" + + def on_data_selected(self, data_name: str): + """ + 当变量树中的数据被单击选中时,调用这个方法。 + """ + self.current_var_name = data_name + logger.info('Variable clicked. Name is \'' + data_name) + + def on_data_modified(self, var_name: str, variable: object, data_source: str): + """ + 在数据被修改时,调用这个方法。 + """ + pass + + def on_close(self): + self.hide() + self.deleteLater() + + def show_window(self, window_name): + window_dic = { + "matrix_calc": MatrixCalcDialog, + "matrix_inv": MatrixInvDialog, + "linear_equations": LinerEquationSolveDialog, + "matrix_numbers": MatrixNumbersDialog, + } + if window_name in self.op_windows.keys(): + self.op_windows[window_name].deleteLater() + + self.op_windows[window_name] = window_dic[window_name]() + self.op_windows[window_name].setWindowFlags( + self.op_windows[window_name].windowFlags() | Qt.WindowStaysOnTopHint) + self.op_windows[window_name].show() + + def bind_events(self): + """ + 绑定事件。这个将在界面加载完成之后被调用。 + """ + self.get_control_widget('button_matrix_calc').clicked.connect(lambda: self.show_window("matrix_calc")) + self.get_control_widget('button_linear_equations').clicked.connect(lambda: self.show_window("linear_equations")) + self.get_control_widget('button_matrix_inv').clicked.connect(lambda: self.show_window("matrix_inv")) + self.get_control_widget('button_matrix_numbers').clicked.connect(lambda: self.show_window("matrix_numbers")) + + self.extension_lib.Signal.get_close_signal().connect(self.on_close) + + def slot_var_reload(self, str, dict): + """ + 刷新工作区间中的变量 + """ + import pandas as pd + self.extension_lib.Data.set_var(str, pd.DataFrame.from_dict(dict)) + def insert_after(self) -> str: + return "applications_toolbar" + + + +class Extension(BaseExtension): + if TYPE_CHECKING: + interface: 'DrawingsInterface' = None + widget: 'PMDrawingsToolBar' = None + extension_lib: 'extension_lib' = None + + def on_loading(self): + pass + + def on_load(self): + drawings_toolbar: 'PMCalcToolBar' = self.widgets['PMCalcToolBar'] + drawings_toolbar.extension_lib = self.extension_lib + self.drawings_toolbar = drawings_toolbar + self.interface.drawing_item_double_clicked_signal = drawings_toolbar.drawing_item_double_clicked_signal + + self.interface.drawing_item_double_clicked_signal.connect(self.interface.on_clicked) + self.interface.applications_toolbar = drawings_toolbar + + self.extension_lib.Data.add_data_changed_callback(drawings_toolbar.on_data_modified) + self.extension_lib.Signal.get_widgets_ready_signal().connect(self.bind_events) + + def bind_events(self): + workspace_interface = self.extension_lib.get_interface('workspace_inspector') + workspace_interface.add_select_data_callback(self.drawings_toolbar.on_data_selected) + + +class CalcInterface(BaseInterface): + drawing_item_double_clicked_signal: 'Signal' = None + drawings_toolbar: 'PMDrawingsToolBar' = None + + def on_clicked(self, name: str): + pass + # print('interface', name) + + def add_graph_button(self, name: str, text: str, icon_path: str, callback: Callable, hint: str = ''): + """ + 添加一个绘图按钮。name表示按钮的名称,text表示按钮的文字,icon_path表示按钮的图标路径,callback表示按钮的回调函数 + hint表示的就是按钮鼠标悬浮时候的提示文字。 + 例如: + extension_lib.get_interface('drawings_toolbar').add_graph_button('aaaaaa','hahahaahahah', + ':/pyqt/source/images/lc_searchdialog.png',lambda :print('123123123')) + """ + self.drawings_toolbar.add_toolbox_widget(name, text, icon_path, hint, refresh=True) diff --git a/packages/pm_calc/package.json b/packages/pm_calc/package.json new file mode 100644 index 00000000..e232b796 --- /dev/null +++ b/packages/pm_calc/package.json @@ -0,0 +1,26 @@ +{ + "name":"pm_calc", + "display_name":"计算", + "version":"0.1.0", + "description":"内置计算的菜单", + "icon":"ipython_console.jpg", + "interface":{ + "file":"main.py", + "interface":"CalcInterface" + }, + "widgets":[ + { + "file":"main.py", + "widget":"PMCalcToolBar", + "position":"new_toolbar", + "config":{ + "message": "no", + "name": "pm_calc", + "text": "数据" + } + } + ], + "requirements":[ + "workspace_inspector" + ] +} \ No newline at end of file diff --git a/packages/pm_calc/preprocess.py b/packages/pm_calc/preprocess.py new file mode 100644 index 00000000..abdb9e44 --- /dev/null +++ b/packages/pm_calc/preprocess.py @@ -0,0 +1,1835 @@ +import os +import sys +import logging +import datetime +import webbrowser +import numpy as np +import pandas as pd +from pandas.api.types import is_numeric_dtype +from pandas.api.types import is_float_dtype +from pandas.api.types import is_string_dtype + +# # 导入Qt模块 +from PySide2.QtCore import QSize, Qt, Signal +from PySide2.QtGui import QPixmap +from PySide2.QtWidgets import QHBoxLayout, QWidget, QSpacerItem, QToolButton, QSizePolicy, QWizard, QMessageBox, \ + QFileDialog, QFrame, QDesktopWidget, QDialog, QTableWidgetItem, QInputDialog, QAbstractItemView, QLineEdit, \ + QApplication +# 导入数据相关操作模块 +from packages.pm_preprocess.ui.data_role import Ui_Form as DataRole_Ui_Form # 数据角色 +from packages.pm_preprocess.ui.data_info import Ui_Form as DataInfo_Ui_Form # 数据信息 +from packages.pm_preprocess.ui.data_column_desc import Ui_Form as Columns_desc_Ui_Form # 数据列描述 +from packages.pm_preprocess.ui.data_delete_row import Ui_Form as DataDeleteRow_Ui_Form # 数据删除行 +from packages.pm_preprocess.ui.data_delete_column import Ui_Form as DataDeleteColumn_Ui_Form +from packages.pm_preprocess.ui.data_merge_vertical import Ui_Form as DataMergeVertical_Ui_Form +from packages.pm_preprocess.ui.data_merge_horizontal import Ui_Form as DataMergeHorizontal_Ui_Form +from packages.pm_preprocess.ui.data_partition import Ui_Form as DataPartition_Ui_Form +from packages.pm_preprocess.ui.data_new_column import Ui_Form as DataNewColumn_Ui_Form +from packages.pm_preprocess.ui.data_sort import Ui_Form as DataSort_Ui_Form +from packages.pm_preprocess.ui.data_transpose import Ui_Form as DataTranspose_Ui_Form +from packages.pm_preprocess.ui.data_sample import Ui_Form as DataSample_Ui_Form +from packages.pm_preprocess.ui.data_standard import Ui_Form as DataStandard_Ui_Form +from packages.pm_preprocess.ui.data_column_encode import Ui_Form as DataColumnEncode_Ui_Form +from packages.pm_preprocess.ui.data_column_name import Ui_Form as DataColumnName_Ui_Form + +# 定义日志输出格式 +logging.basicConfig(format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%Y-%m-%d %H:%M:%S", + level=logging.INFO) + + +class DataInfoForm(QDialog, DataInfo_Ui_Form): + """ + 打开"数据-数据信息" + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + self.all_dataset = dict() + self.all_dataset_name = list() + + self.current_dataset_name = '' # 当前数据集名称 + self.info = pd.DataFrame() + + # 更新数据 + self.pushButton_ok.clicked.connect(self.close) + self.pushButton_cancel.clicked.connect(self.close) + # 帮助 + self.pushButton_help.clicked.connect(self.get_help) + # 修改当前数据集 + self.toolButton_dataset_name.clicked.connect(self.change_dataset_name) + # 更新当前数据信息 + self.lineEdit_dataset_name.textChanged.connect(self.change_dataset_info) + + # ================================自定义槽函数========================= + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def info_init(self): + if any(self.info): + input_table_rows = self.info.head(100).shape[0] + input_table_colunms = self.info.shape[1] + input_table_header = self.info.columns.values.tolist() + self.tableWidget.setColumnCount(input_table_colunms) + self.tableWidget.setRowCount(input_table_rows) + self.tableWidget.setHorizontalHeaderLabels(input_table_header) + + # 数据预览窗口 + for i in range(input_table_rows): + input_table_rows_values = self.info.iloc[[i]] + input_table_rows_values_array = np.array(input_table_rows_values) + input_table_rows_values_list = input_table_rows_values_array.tolist()[0] + for j in range(input_table_colunms): + input_table_items_list = input_table_rows_values_list[j] + + input_table_items = str(input_table_items_list) + newItem = QTableWidgetItem(input_table_items) + newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.tableWidget.setItem(i, j, newItem) + + def change_dataset_name(self): + # 修改当前数据集名称 + items = self.all_dataset_name + item, ok = QInputDialog.getItem(self, "修改数据集", "请选择要查看的数据集", items, 0, False) + if ok and item: + self.current_dataset_name = item + self.lineEdit_dataset_name.setText(item) + + def change_dataset_info(self): + # 修改当前数据集的数据信息 + self.lineEdit_path.setText(self.all_dataset.get(self.current_dataset_name + ".path")) + self.lineEdit_row.setText(self.all_dataset.get(self.current_dataset_name + ".row")) + self.lineEdit_col.setText(self.all_dataset.get(self.current_dataset_name + ".col")) + self.lineEdit_file_size.setText(self.all_dataset.get(self.current_dataset_name + ".file_size")) + self.lineEdit_memory_usage.setText( + self.all_dataset.get(self.current_dataset_name + ".memory_usage")) + self.lineEdit_create_time.setText( + self.all_dataset.get(self.current_dataset_name + ".create_time")) + self.lineEdit_update_time.setText( + self.all_dataset.get(self.current_dataset_name + ".update_time")) + self.info = self.all_dataset.get(self.current_dataset_name + ".info") + self.info_init() + + +class DataRoleForm(QDialog, DataRole_Ui_Form): + """ + "新建窗口" + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset = pd.DataFrame() # 当前数据集 + self.current_dataset_name = "" + self.all_dataset = dict() + self.filter_dataset = pd.DataFrame() # 预览筛选后内容 + self.role_dataset = pd.DataFrame() # 预览筛选后内容 + + self.pushButton_cancel.clicked.connect(self.close) + self.pushButton_ok.clicked.connect(self.close) + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_export.clicked.connect(self.dataset_export) + self.pushButton_find.clicked.connect(self.change_find) + self.lineEdit_col_find.textChanged.connect(self.change_find) + self.comboBox_columns.currentTextChanged.connect(self.change_column) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def dataset_export(self): + fileName_choose, filetype = QFileDialog.getSaveFileName(self, + "文件保存", + output_dir + r"/role.csv", # 起始路径 + "All Files (*);;CSV Files (*.csv)") + + if fileName_choose == "": + print("\n取消选择") + return + else: + self.role_dataset.to_csv(fileName_choose, index=False) + print("\n保存成功!") + + def change_column(self): + """ + 查找指定列的数据角色 + """ + col = self.comboBox_columns.currentText() + if col.strip() == "全部": + self.flush_preview(self.role_dataset) + else: + self.filter_dataset = self.role_dataset[self.role_dataset['名称'] == col] + self.flush_preview(self.filter_dataset) + + def change_find(self): + """ + 查找指定列的数据角色 + """ + find_text = self.lineEdit_col_find.text() + self.filter_dataset = self.role_dataset[self.role_dataset['名称'].map(str.lower).str.contains(find_text.lower())] + self.flush_preview(self.filter_dataset) + + def dataset_role(self): + data = self.current_dataset + col_name = list() + dtype = list() + width = list() + precision = list() + label = list() + total_cnt = list() + missing = list() + measure = list() + role = [] + for col in data.columns: + col_name.append(col) + dtype.append(str(data[col].dtypes)) + width.append(max([len(str(x)) for x in data[col]])) # 最大宽度 + + if is_float_dtype(data[col]): # 最大精度 + precision.append(max([len(str(x).split('.')[1]) for x in data[col].dropna()])) + else: + precision.append("") + label.append('') + total_cnt.append(len(data[col])) + missing.append(data[col].isnull().sum()) + + if is_numeric_dtype(data[col]): + measure.append("标度") + elif is_string_dtype(data[col]): + measure.append("名义") + else: + measure.append("") + + if col.lower() == "id": + role.append("ID") + elif col.lower() == "id" or col.lower() == "target": + role.append("目标") + else: + role.append("输入") + self.role_dataset = pd.DataFrame({"名称": col_name, "类型": dtype, "宽度": width, + "精度": precision, "标签": label, "数量": total_cnt, + "缺失值": missing, "测量": measure, "角色": role}) + + self.flush_preview(self.role_dataset) + + def flush_preview(self, dataset): + if any(dataset): + input_table_rows = dataset.head(100).shape[0] + input_table_colunms = dataset.shape[1] + input_table_header = dataset.columns.values.tolist() + self.tableWidget_dataset.setColumnCount(input_table_colunms) + self.tableWidget_dataset.setRowCount(input_table_rows) + self.tableWidget_dataset.setHorizontalHeaderLabels(input_table_header) + + # 数据预览窗口 + for i in range(input_table_rows): + input_table_rows_values = dataset.iloc[[i]] + input_table_rows_values_array = np.array(input_table_rows_values) + input_table_rows_values_list = input_table_rows_values_array.tolist()[0] + for j in range(input_table_colunms): + input_table_items_list = input_table_rows_values_list[j] + + input_table_items = str(input_table_items_list) + newItem = QTableWidgetItem(input_table_items) + newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.tableWidget_dataset.setItem(i, j, newItem) + + +class DataColumnDescForm(QDialog, Columns_desc_Ui_Form): + """ + 打开"数据-列"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset = pd.DataFrame() + self.current_dataset_name = '' + self.dataset_alter = pd.DataFrame() + self.all_dataset = dict() + + self.listWidget_selected.itemChanged.connect(self.slot_var_change) + + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_cancel.clicked.connect(self.close) + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_selected_add_2.clicked.connect(self.var_selected_add) + self.pushButton_selected_add.clicked.connect(self.var_selected_add) + self.pushButton_selected_up.clicked.connect(self.var_selected_up) + self.pushButton_selected_down.clicked.connect(self.var_selected_down) + self.pushButton_selected_del.clicked.connect(self.var_selected_del) + self.pushButton_group_add_2.clicked.connect(self.var_group_add) + self.pushButton_group_add.clicked.connect(self.var_group_add) + self.pushButton_group_up.clicked.connect(self.var_group_up) + self.pushButton_group_down.clicked.connect(self.var_group_down) + self.pushButton_group_del.clicked.connect(self.var_group_del) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def slot_var_change(self): + # 只允许查看一个变量的描述 + if self.listWidget_selected.count() > 0: + QMessageBox.information(self, "注意", "只允许查看一个变量的描述", QMessageBox.Yes) + + def var_selected_del(self): + current_row = self.listWidget_selected.currentRow() + self.listWidget_selected.removeItemWidget(self.listWidget_selected.takeItem(current_row)) + + def var_selected_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_add(self): + current_item = self.listWidget_var.currentItem() + selected_item = self.listWidget_selected.item(0) + if current_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + elif current_item is not None and selected_item is not None: + if self.listWidget_var.currentItem().text() == self.listWidget_selected.item(0).text(): + QMessageBox.information(self, "注意", "变量已存在", QMessageBox.Yes) + else: + selected_item.setText(self.listWidget_var.currentItem().text()) + elif current_item is not None and selected_item is None: + self.listWidget_selected.addItem(current_item.text()) + else: + self.listWidget_selected.removeItemWidget(self.listWidget_selected.takeItem(0)) + self.listWidget_selected.addItem(current_item.text()) + + def var_group_del(self): + current_row = self.listWidget_group.currentRow() + self.listWidget_group.removeItemWidget(self.listWidget_group.takeItem(current_row)) + + def var_group_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_group.count() + for i in range(count): + var_list.append(self.listWidget_group.item(i).text()) + row = self.listWidget_group.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_group.clear() + # 重新添加新项 + self.listWidget_group.addItems(var_list) + + def var_group_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_group.count() + for i in range(count): + var_list.append(self.listWidget_group.item(i).text()) + row = self.listWidget_group.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_group.clear() + # 重新添加新项 + self.listWidget_group.addItems(var_list) + + def var_group_add(self): + selected_item = self.listWidget_var.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + else: + self.listWidget_group.addItem(selected_item.text()) + + def dataset_column_desc(self): + var = self.listWidget_selected.item(0).text() + + group_list = [] # 保存已选变量 + count = self.listWidget_group.count() # 获取listwidget中条目数 + for i in range(count): + group_list.append(self.listWidget_group.item(i).text()) + + self.dataset_alter = self.current_dataset.copy().groupby(group_list)[var].describe().reset_index() + if isinstance(self.dataset_alter, pd.DataFrame): + self.flush_preview(self.dataset_alter) # 预览列的基本描述 + else: + self.dataset_alter = self.dataset_alter.to_frame() + self.flush_preview(self.dataset_alter) + + def dataset_update(self): + self.dataset_column_desc() + self.tabWidget.setCurrentIndex(1) + + def dataset_save(self): + self.dataset_column_desc() + default_name = self.current_dataset_name.split('.')[0] + '_col' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = '' + file_size = '' + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + logging.info("导入数据信号发射成功") + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + def flush_preview(self, dataset): + if any(dataset): + input_table_rows = dataset.head(100).shape[0] + input_table_colunms = dataset.shape[1] + input_table_header = dataset.columns.values.tolist() + self.tableWidget_dataset.setColumnCount(input_table_colunms) + self.tableWidget_dataset.setRowCount(input_table_rows) + self.tableWidget_dataset.setHorizontalHeaderLabels(input_table_header) + + # 数据预览窗口 + for i in range(input_table_rows): + input_table_rows_values = dataset.iloc[[i]] + input_table_rows_values_array = np.array(input_table_rows_values) + input_table_rows_values_list = input_table_rows_values_array.tolist()[0] + for j in range(input_table_colunms): + input_table_items_list = input_table_rows_values_list[j] + + input_table_items = str(input_table_items_list) + newItem = QTableWidgetItem(input_table_items) + newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.tableWidget_dataset.setItem(i, j, newItem) + + +class DataDeleteRowForm(QWidget, DataDeleteRow_Ui_Form): + """ + 打开"数据-删除行"窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + +class DataDeleteColumnForm(QWidget, DataDeleteColumn_Ui_Form): + """ + 打开"数据-删除列"窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + +class DataMergeVerticalForm(QDialog, DataMergeVertical_Ui_Form): + """ + 打开"数据-纵向合并"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset_name = "" + self.all_dataset = {} # 定义“全部数据集”为一个字典 + self.all_dataset_name = () + self.dataset_alter = pd.DataFrame() # 修改后的数据 + + self.listWidget_dataset.setSelectionMode(QAbstractItemView.ExtendedSelection) # 设置为按住ctrl可以多选 + self.listWidget_start.setAcceptDrops(True) + self.listWidget_append.setAcceptDrops(True) + + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_cancel.clicked.connect(self.close) + self.listWidget_start.itemChanged.connect(self.slot_listWidget_start_change) + self.pushButton_insert_start.clicked.connect(self.dataset_insert_start) + self.pushButton_insert_append.clicked.connect(self.dataset_insert_append) + + self.pushButton_start_add.clicked.connect(self.dataset_insert_start) + self.pushButton_append_add.clicked.connect(self.dataset_insert_append) + + self.pushButton_start_del.clicked.connect(self.dataset_start_del) + self.pushButton_append_del.clicked.connect(self.dataset_append_del) + + self.pushButton_start_up.clicked.connect(self.dataset_start_up) + self.pushButton_append_up.clicked.connect(self.dataset_append_up) + + self.pushButton_start_down.clicked.connect(self.dataset_start_down) + self.pushButton_append_down.clicked.connect(self.dataset_append_down) + + # ================================事件处理函数========================= + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def slot_listWidget_start_change(self): + self.current_dataset_name = self.listWidget_start.item(0).text() + + # ================================自定义功能函数========================= + def dataset_start_del(self): + current_row = self.listWidget_start.currentRow() + self.listWidget_start.removeItemWidget(self.listWidget_start.takeItem(current_row)) + + def dataset_append_del(self): + current_row = self.listWidget_append.currentRow() + self.listWidget_append.removeItemWidget(self.listWidget_append.takeItem(current_row)) + + def dataset_append_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_append.count() + for i in range(count): + var_list.append(self.listWidget_append.item(i).text()) + row = self.listWidget_append.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_append.clear() + # 重新添加新项 + self.listWidget_append.addItems(var_list) + + def dataset_append_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_append.count() + for i in range(count): + var_list.append(self.listWidget_append.item(i).text()) + row = self.listWidget_append.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_append.clear() + # 重新添加新项 + self.listWidget_append.addItems(var_list) + + def dataset_start_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_start.count() + for i in range(count): + var_list.append(self.listWidget_start.item(i).text()) + row = self.listWidget_start.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_start.clear() + # 重新添加新项 + self.listWidget_start.addItems(var_list) + + def dataset_start_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_start.count() + for i in range(count): + var_list.append(self.listWidget_start.item(i).text()) + row = self.listWidget_start.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_start.clear() + # 重新添加新项 + self.listWidget_start.addItems(var_list) + + def dataset_insert_start(self): + selected_item = self.listWidget_dataset.currentItem() + start_item = self.listWidget_start.item(0) + if selected_item is None: + QMessageBox.information(self, "注意", "请先选择起始数据集", QMessageBox.Yes) + elif start_item is not None: + if selected_item.text() == self.listWidget_start.item(0).text(): + QMessageBox.information(self, "注意", "起始数据集已存在", QMessageBox.Yes) + else: + self.listWidget_start.item(0).setText(selected_item.text()) + elif start_item is None: + self.listWidget_start.addItem(selected_item.text()) + else: + self.listWidget_start.removeItemWidget(self.listWidget_start.takeItem(0)) + self.listWidget_start.addItem(selected_item.text()) + + def dataset_insert_append(self): + selected_item = self.listWidget_dataset.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择合并数据集", QMessageBox.Yes) + elif selected_item.text() != self.listWidget_start.item(0).text(): + current_item = self.listWidget_dataset.currentItem() + self.listWidget_append.addItem(current_item.text()) + elif selected_item.text() == self.listWidget_start.item(0).text(): + QMessageBox.information(self, "注意", "合并数据集不能与起始数据集同名", QMessageBox.Yes) + else: + selected = self.listWidget_dataset.selectedItems() + dataset_start_text = self.listWidget_dataset.currentItem().text() + for item in selected: + if item.text() != dataset_start_text: + self.listWidget_append.addItem(item.text()) + + def dataset_merge_vertical(self): + dataset_name = self.listWidget_start.item(0).text() + dataset_start = self.all_dataset.get(dataset_name) + dataset_merge_list_name = [] + dataset_merge_list = [dataset_start, ] + for i in range(self.listWidget_append.count()): + dataset_merge_list_name.append(self.listWidget_append.item(i).text()) + dataset_merge_list.append(self.all_dataset.get(self.listWidget_append.item(i).text())) + + if self.listWidget_start.count() < 1: + QMessageBox.information(self, "注意", "请选择起始数据集", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) + elif self.listWidget_append.count() < 1: + QMessageBox.information(self, "注意", "请选择合并数据集", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) + else: + self.dataset_alter = pd.concat(dataset_merge_list, ignore_index=True) # 合并数据 + + def dataset_update(self): + self.dataset_merge_vertical() + reply = QMessageBox.information(self, "注意", "是否覆盖原数据", QMessageBox.Yes | QMessageBox.No) + if reply == QMessageBox.Yes: + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(self.current_dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + def dataset_save(self): + self.dataset_merge_vertical() + default_name = self.current_dataset_name.split('.')[0] + '_v' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + +class DataMergeHorizontalForm(QDialog, DataMergeHorizontal_Ui_Form): + """ + 打开"数据-横向合并"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset_name = "" + self.all_dataset = {} # 定义“全部数据集”为一个字典 + self.dataset_alter = pd.DataFrame() + + self.listWidget_dataset.setSelectionMode(QAbstractItemView.ExtendedSelection) # 设置为按住ctrl可以多选 + self.listWidget_start.setAcceptDrops(True) + self.listWidget_append.setAcceptDrops(True) + self.listWidget_start.itemChanged.connect(self.slot_listWidget_start_change) + + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_cancel.clicked.connect(self.close) + self.pushButton_start_add.clicked.connect(self.dataset_start_add) + self.pushButton_start_up.clicked.connect(self.dataset_start_up) + self.pushButton_start_down.clicked.connect(self.dataset_start_down) + self.pushButton_start_del.clicked.connect(self.dataset_start_del) + self.pushButton_append_add.clicked.connect(self.dataset_append_add) + self.pushButton_append_up.clicked.connect(self.dataset_append_up) + self.pushButton_append_down.clicked.connect(self.dataset_append_down) + self.pushButton_append_del.clicked.connect(self.dataset_append_del) + + # ================================事件处理函数========================= + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def slot_listWidget_start_change(self): + self.current_dataset_name = self.listWidget_start.item(0).text() + + # ================================自定义功能函数========================= + def dataset_start_del(self): + current_row = self.listWidget_start.currentRow() + self.listWidget_start.removeItemWidget(self.listWidget_start.takeItem(current_row)) + + def dataset_append_add(self): + selected_item = self.listWidget_dataset.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择合并数据集", QMessageBox.Yes) + elif selected_item.text() != self.listWidget_start.item(0).text(): + current_item = self.listWidget_dataset.currentItem() + self.listWidget_append.addItem(current_item.text()) + elif selected_item.text() == self.listWidget_start.item(0).text(): + QMessageBox.information(self, "注意", "合并数据集不能与起始数据集同名", QMessageBox.Yes) + else: + selected = self.listWidget_dataset.selectedItems() + dataset_start_text = self.listWidget_dataset.currentItem().text() + for item in selected: + if item.text() != dataset_start_text: + self.listWidget_append.addItem(item.text()) + + def dataset_append_del(self): + current_row = self.listWidget_append.currentRow() + self.listWidget_append.removeItemWidget(self.listWidget_append.takeItem(current_row)) + + def dataset_append_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_append.count() + for i in range(count): + var_list.append(self.listWidget_append.item(i).text()) + row = self.listWidget_append.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_append.clear() + # 重新添加新项 + self.listWidget_append.addItems(var_list) + + def dataset_append_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_append.count() + for i in range(count): + var_list.append(self.listWidget_append.item(i).text()) + row = self.listWidget_append.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_append.clear() + # 重新添加新项 + self.listWidget_append.addItems(var_list) + + def dataset_start_add(self): + selected_item = self.listWidget_dataset.currentItem() + start_item = self.listWidget_start.item(0) + if selected_item is None: + QMessageBox.information(self, "注意", "请先选择起始数据集", QMessageBox.Yes) + elif start_item is not None: + if selected_item.text() == self.listWidget_start.item(0).text(): + QMessageBox.information(self, "注意", "起始数据集已存在", QMessageBox.Yes) + else: + self.listWidget_start.item(0).setText(selected_item.text()) + elif start_item is None: + self.listWidget_start.addItem(selected_item.text()) + else: + self.listWidget_start.removeItemWidget(self.listWidget_start.takeItem(0)) + self.listWidget_start.addItem(selected_item.text()) + + def dataset_start_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_start.count() + for i in range(count): + var_list.append(self.listWidget_start.item(i).text()) + row = self.listWidget_start.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_start.clear() + # 重新添加新项 + self.listWidget_start.addItems(var_list) + + def dataset_start_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_start.count() + for i in range(count): + var_list.append(self.listWidget_start.item(i).text()) + row = self.listWidget_start.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_start.clear() + # 重新添加新项 + self.listWidget_start.addItems(var_list) + + def dataset_merge_horizontal(self): + dataset_name = self.listWidget_start.item(0).text() # dataset_name + dataset_start = self.all_dataset.get(dataset_name) # dataset_start + dataset_merge_list_name = [] # 要合并的数据集名称 + dataset_merge_list = [] # 要合并的数据 + for i in range(self.listWidget_append.count()): # 遍历列表n-1次 + if i < self.listWidget_append.count(): + dataset_name = self.listWidget_append.item(i).text() + dataset_merge_list_name.append(dataset_name) + dataset = self.all_dataset.get(self.listWidget_append.item(i).text()).copy() # 避免修改原始数据 + dataset.columns = [x + "_" + dataset_name.split('.')[0] for x in dataset.columns] # 为列名添加数据集后缀 + dataset_merge_list.append(dataset) + + if self.listWidget_start.count() < 1: + QMessageBox.information(self, "注意", "请选择起始数据集", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) + elif self.listWidget_append.count() < 1: + QMessageBox.information(self, "注意", "请选择合并数据集", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) + else: + data_element = [dataset_start] + for item in dataset_merge_list: + data_element.append(item) + self.dataset_alter = pd.concat(data_element, ignore_index=False, axis=1) # 横向合并 + + def dataset_update(self): + self.dataset_merge_horizontal() + reply = QMessageBox.information(self, "注意", "是否覆盖原数据", QMessageBox.Yes | QMessageBox.No) + if reply == QMessageBox.Yes: + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(self.current_dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + def dataset_save(self): + self.dataset_merge_horizontal() + default_name = self.current_dataset_name.split('.')[0] + '_h' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + +class DataPartitionForm(QDialog, DataPartition_Ui_Form): + """ + 打开"数据-数据分区"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset = pd.DataFrame() + self.current_dataset_name = '' + + self.widget_part_2.hide() + self.widget_part_3.hide() + self.widget_part_4.hide() + self.widget_part_other.setVisible(False) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + +class DataNewColumnForm(QWidget, DataNewColumn_Ui_Form): + """ + 打开"从sas导入"窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + + + + +class DataSortForm(QWidget, DataSort_Ui_Form): + """ + 打开"从sas导入"窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + +class DataTransposeForm(QDialog, DataTranspose_Ui_Form): + """ + 打开"数据-转置"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改当前数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset_columns = '' + self.current_dataset_name = '' + self.current_dataset = pd.DataFrame() # 当前数据集 + self.dataset_alter = pd.DataFrame() # 修改后的数据集 + self.all_dataset = dict() + # 按钮事件 + self.listWidget_var.setSelectionMode(QAbstractItemView.ExtendedSelection) # 设置为按住ctrl可以多选 + self.listWidget_selected.setAcceptDrops(True) + + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_cancel.clicked.connect(self.close) + + self.pushButton_selected_add.clicked.connect(self.var_selected_add) + self.pushButton_selected_up.clicked.connect(self.var_selected_up) + self.pushButton_selected_down.clicked.connect(self.var_selected_down) + self.pushButton_selected_del.clicked.connect(self.var_selected_del) + + self.pushButton_add.clicked.connect(self.var_selected_add) + self.pushButton_delete.clicked.connect(self.var_selected_add) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + # ================================自定义功能函数========================= + def var_selected_del(self): + current_row = self.listWidget_selected.currentRow() + self.listWidget_selected.removeItemWidget(self.listWidget_selected.takeItem(current_row)) + + def var_selected_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_add(self): + selected_item = self.listWidget_var.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + else: + self.listWidget_selected.addItem(selected_item.text()) + + def dataset_transpose(self): + dataset_name = self.listWidget_selected.item(0).text() + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + self.dataset_alter = self.current_dataset.loc[:, var_list].T # 使用pandas DataFrame.T转置数据 + self.dataset_alter.columns = [str(x) for x in self.dataset_alter.columns] # 将索引转化为字符串 + print("数据集转置成功") + + def dataset_update(self): + self.dataset_transpose() + reply = QMessageBox.information(self, "注意", "是否覆盖原数据", QMessageBox.Yes | QMessageBox.No) + if reply == QMessageBox.Yes: + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(self.current_dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + def dataset_save(self): + self.dataset_transpose() + default_name = self.current_dataset_name.split('.')[0] + '_transpose' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + +class DataStandardForm(QWidget, DataStandard_Ui_Form): + """ + 打开数据标准化窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + +class DataSampleForm(QDialog, DataSample_Ui_Form): + """ + 打开"数据抽样"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset = pd.DataFrame() + self.dataset_alter = pd.DataFrame() + self.dataset_edit = pd.DataFrame() + self.current_dataset_name = '' + self.all_dataset = {} + self.current_dataset_columns = [] + + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_cancel.clicked.connect(self.close) + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_selected_add_2.clicked.connect(self.var_selected_add) + self.pushButton_selected_add.clicked.connect(self.var_selected_add) + self.pushButton_selected_up.clicked.connect(self.var_selected_up) + self.pushButton_selected_down.clicked.connect(self.var_selected_down) + self.pushButton_selected_del.clicked.connect(self.var_selected_del) + self.pushButton_weight_add_2.clicked.connect(self.var_weight_add) + self.pushButton_weight_add.clicked.connect(self.var_weight_add) + self.pushButton_weight_up.clicked.connect(self.var_weight_up) + self.pushButton_weight_down.clicked.connect(self.var_weight_down) + self.pushButton_weight_del.clicked.connect(self.var_weight_del) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def var_selected_del(self): + # 移除选中的item + current_row = self.listWidget_selected.currentRow() + self.listWidget_selected.removeItemWidget(self.listWidget_selected.takeItem(current_row)) + # 修改当前数据集 + var_list = [] + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + self.dataset_edit = self.current_dataset[var_list] + + def var_selected_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_add(self): + current_item = self.listWidget_var.currentItem() + if current_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + else: + if_exist = 0 # 检查是否已存在同名变量 + for i in range(self.listWidget_selected.count()): + if self.listWidget_selected.item(i).text() == self.listWidget_var.currentItem().text(): + if_exist = 1 + + if if_exist != 1: + self.listWidget_selected.addItem(current_item.text()) + # 修改当前数据集 + var_list = [] + for i in range(self.listWidget_selected.count()): + var_list.append(self.listWidget_selected.item(i).text()) + self.dataset_edit = self.current_dataset[var_list] + else: + QMessageBox.information(self, "注意", "变量已存在", QMessageBox.Yes) + + def var_weight_del(self): + current_row = self.listWidget_weight.currentRow() + self.listWidget_weight.removeItemWidget(self.listWidget_weight.takeItem(current_row)) + + def var_weight_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_weight.count() + for i in range(count): + var_list.append(self.listWidget_weight.item(i).text()) + row = self.listWidget_weight.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_weight.clear() + # 重新添加新项 + self.listWidget_weight.addItems(var_list) + + def var_weight_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_weight.count() + for i in range(count): + var_list.append(self.listWidget_weight.item(i).text()) + row = self.listWidget_weight.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_weight.clear() + # 重新添加新项 + self.listWidget_weight.addItems(var_list) + + def var_weight_add(self): + selected_item = self.listWidget_var.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + else: + self.listWidget_weight.addItem(selected_item.text()) + + def dataset_sample(self): + if self.comboBox_replace.currentText() == "无放回抽样": + random_replace = True + else: + random_replace = False + + if self.comboBox_axis.currentText() == "行": + random_axis = 0 + # 权重 + weight_list = [] + count = self.listWidget_weight.count() + for i in range(count): + weight_list.append(self.listWidget_weight.item(i).text()) + else: + random_axis = 1 + + random_state = self.spinBox_random_state.value() + if self.radioButton_size.isChecked(): + self.dataset_alter = self.dataset_edit.sample(n=self.spinBox_size.value(), + random_state=random_state, + replace=random_replace, + axis=random_axis) + elif self.radioButton_ratio.isChecked(): + self.dataset_alter = self.dataset_edit.sample(frac=self.doubleSpinBox_ratio.value() / 100, + random_state=random_state, + replace=random_replace, + axis=random_axis) + + def dataset_update(self): + self.dataset_sample() + reply = QMessageBox.information(self, "注意", "是否覆盖原数据", QMessageBox.Yes | QMessageBox.No) + if reply == QMessageBox.Yes: + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(self.current_dataset_name, self.dataset_alter.to_dict(), path, + create_time, update_time, remarks, file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + def dataset_save(self): + self.dataset_sample() + default_name = self.current_dataset_name.split('.')[0] + '_sample' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = '' + file_size = '' + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + logging.info("导入数据信号发射成功") + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + +class DataColumnNameForm(QDialog, DataColumnName_Ui_Form): + """ + 打开"数据-列名处理"窗口 + """ + signal_data_change = Signal(str, dict, str, str, str, str, str) # 自定义信号,用于修改数据 + signal_flush_console = Signal(str, str, str) # 自定义信号,用于修改日志 + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + self.current_dataset = pd.DataFrame() # 当前数据集 + self.dataset_edit = pd.DataFrame() + self.dataset_alter = pd.DataFrame() # 处理后数据 + self.current_dataset_name = "" + self.all_dataset = dict() + + self.pushButton_cancel.clicked.connect(self.close) + self.pushButton_ok.clicked.connect(self.dataset_update) + self.pushButton_help.clicked.connect(self.get_help) + self.pushButton_save.clicked.connect(self.dataset_save) + self.pushButton_add.clicked.connect(self.var_selected_add) + self.pushButton_selected_add.clicked.connect(self.var_selected_add) + self.pushButton_selected_up.clicked.connect(self.var_selected_up) + self.pushButton_selected_down.clicked.connect(self.var_selected_down) + self.pushButton_selected_del.clicked.connect(self.var_selected_del) + self.pushButton_delete.clicked.connect(self.var_selected_del) + self.pushButton_preview.clicked.connect(self.dataset_columns_preview) + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + # ================================自定义槽函数========================= + def get_help(self): + """ + 打开帮助页面 + """ + try: + webbrowser.get('chrome').open_new_tab("http://www.pyminer.com") + except Exception as e: + webbrowser.open_new_tab("http://www.pyminer.com") + + def var_selected_del(self): + # 移除选中的item + current_row = self.listWidget_selected.currentRow() + self.listWidget_selected.removeItemWidget(self.listWidget_selected.takeItem(current_row)) + # 修改当前数据集 + var_list = [] + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + self.dataset_edit = self.current_dataset[var_list] + + def var_selected_up(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row - 1] + var_list[row - 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_down(self): + var_list = [] + # 获取listwidget中条目数 + count = self.listWidget_selected.count() + for i in range(count): + var_list.append(self.listWidget_selected.item(i).text()) + row = self.listWidget_selected.currentRow() + print("row:", row) + temp = var_list[row] + var_list[row] = var_list[row + 1] + var_list[row + 1] = temp + # 清空当前listWidget + self.listWidget_selected.clear() + # 重新添加新项 + self.listWidget_selected.addItems(var_list) + + def var_selected_add(self): + selected_item = self.listWidget_var.currentItem() + if selected_item is None: + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + else: + self.listWidget_selected.addItem(selected_item.text()) + # 修改当前数据集 + var_list = [] + for i in range(self.listWidget_selected.count()): + var_list.append(self.listWidget_selected.item(i).text()) + self.dataset_edit = self.current_dataset[var_list] + + def dataset_init(self): + self.filter_dataset = self.current_dataset.head(10) + self.tableWidget_dataset.setColumnCount(len(self.filter_dataset.columns)) + self.tableWidget_dataset.setRowCount(len(self.filter_dataset.index)) + self.tableWidget_dataset.setSelectionBehavior(QAbstractItemView.SelectRows) + self.tableWidget_dataset.setHorizontalHeaderLabels(self.filter_dataset.columns.values.tolist()) + + for i in range(len(self.filter_dataset.index)): + for j in range(len(self.filter_dataset.columns)): + self.tableWidget_dataset.setItem(i, j, QTableWidgetItem(str(self.filter_dataset.iat[i, j]))) + + for x in range(self.tableWidget_dataset.columnCount()): + headItem = self.tableWidget_dataset.horizontalHeaderItem(x) # 获得水平方向表头的Item对象 + + headItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + + def dataset_columns_preview(self): + data = self.dataset_edit.copy() + col = self.comboBox_columns.currentText() + replace = self.lineEdit_replace.text().strip() + prefix_add = self.lineEdit_prefix_add.text().strip() + prefix_del = self.lineEdit_prefix_del.text().strip() + suffix_add = self.lineEdit_suffix_add.text().strip() + suffix_del = self.lineEdit_suffix_del.text().strip() + + def check_prefix(x, y): + if x[:len(y)] == y: + return x[len(y):] + else: + return x + + def check_suffix(x, y): + if x[-len(y):] == y: + return x[:-len(y)] + else: + return x + + if len(replace) > 0: + if col == "变量列表": + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + return + else: + data.rename(columns={col: replace}, inplace=True) + + if self.checkBox_prefix_add.isChecked() and len(prefix_add) > 0: + data.columns = [prefix_add + col for col in data.columns] + if self.checkBox_prefix_del.isChecked() and len(prefix_del) > 0: + data.columns = [check_prefix(col, prefix_del) for col in data.columns] + if self.checkBox_suffix_add.isChecked() and len(suffix_add) > 0: + data.columns = [col + suffix_add for col in data.columns] + if self.checkBox_suffix_del.isChecked() and len(suffix_del) > 0: + data.columns = [check_suffix(col, suffix_del) for col in data.columns] + self.flush_preview(data) # 刷新预览 + + def dataset_columns(self): + col = self.comboBox_columns.currentText() + replace = self.lineEdit_replace.text().strip() + prefix_add = self.lineEdit_prefix_add.text().strip() + prefix_del = self.lineEdit_prefix_del.text().strip() + suffix_add = self.lineEdit_suffix_add.text().strip() + suffix_del = self.lineEdit_suffix_del.text().strip() + + def check_prefix(x, y): + if x[:len(y)] == y: + return x[len(y):] + else: + return x + + def check_suffix(x, y): + if x[-len(y):] == y: + return x[:-len(y)] + else: + return x + + if len(replace) > 0: + if col == "变量列表": + QMessageBox.information(self, "注意", "请选择变量", QMessageBox.Yes) + return + else: + self.current_dataset.rename(columns={col: replace}, inplace=True) + + if self.checkBox_prefix_add.isChecked() and len(prefix_add) > 0: + self.dataset_edit.columns = [prefix_add + col for col in self.dataset_edit.columns] + if self.checkBox_prefix_del.isChecked() and len(prefix_del) > 0: + self.dataset_edit.columns = [check_prefix(col, prefix_del) for col in self.dataset_edit.columns] + if self.checkBox_suffix_add.isChecked() and len(suffix_add) > 0: + self.dataset_edit.columns = [col + suffix_add for col in self.dataset_edit.columns] + if self.checkBox_suffix_del.isChecked() and len(suffix_del) > 0: + self.dataset_edit.columns = [check_suffix(col, suffix_del) for col in self.dataset_edit.columns] + self.dataset_alter = self.dataset_edit.copy() + self.flush_preview(self.dataset_edit) # 刷新预览 + + def flush_preview(self, dataset): + if any(dataset): + input_table_rows = dataset.head(100).shape[0] + input_table_colunms = dataset.shape[1] + input_table_header = dataset.columns.values.tolist() + self.tableWidget_dataset.setColumnCount(input_table_colunms) + self.tableWidget_dataset.setRowCount(input_table_rows) + self.tableWidget_dataset.setHorizontalHeaderLabels(input_table_header) + + # 数据预览窗口 + for i in range(input_table_rows): + input_table_rows_values = dataset.iloc[[i]] + input_table_rows_values_array = np.array(input_table_rows_values) + input_table_rows_values_list = input_table_rows_values_array.tolist()[0] + for j in range(input_table_colunms): + input_table_items_list = input_table_rows_values_list[j] + + input_table_items = str(input_table_items_list) + newItem = QTableWidgetItem(input_table_items) + newItem.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.tableWidget_dataset.setItem(i, j, newItem) + + def dataset_update(self): + self.dataset_columns() + reply = QMessageBox.information(self, "注意", "是否覆盖原数据", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) + if reply == QMessageBox.Yes: + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(self.current_dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + self.signal_flush_console.emit('info', '数据处理', '列名处理完成') + else: + logging.info("导入数据信号发射失败") + self.signal_flush_console.emit('error', '数据处理', '列名处理失败') + self.close() + + def dataset_save(self): + self.dataset_columns() + default_name = self.current_dataset_name.split('.')[0] + '_col' + dataset_name, ok = QInputDialog.getText(self, "数据集名称", "保存后的数据集名称:", QLineEdit.Normal, default_name) + if ok and (len(dataset_name) != 0): + logging.info("发射导入数据信号") + if len(self.dataset_alter) > 0: + create_time = self.all_dataset.get(self.current_dataset_name + '.create_time') + update_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 数据更新时间 + path = self.all_dataset.get(self.current_dataset_name + '.path') + file_size = self.all_dataset.get(self.current_dataset_name + '.file_size') + remarks = '' + self.signal_data_change.emit(dataset_name, + self.dataset_alter.to_dict(), + path, + create_time, + update_time, + remarks, + file_size) # 发射信号 + self.close() + else: + logging.info("导入数据信号发射失败") + self.close() + + +class DataColumnEncodeForm(QWidget, DataColumnEncode_Ui_Form): + """ + 打开"数据编码"窗口 + """ + + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + self.center() + + def keyPressEvent(self, e): + """ + 按键盘Escape退出当前窗口 + @param e: + """ + if e.key() == Qt.Key_Escape: + self.close() + + def center(self): + screen = QDesktopWidget().screenGeometry() + size = self.geometry() + self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) + + +# ====================================窗体测试程序============================ +if __name__ == '__main__': + app = QApplication(sys.argv) + form = DataColumnEncodeForm() + form.show() + sys.exit(app.exec_()) diff --git a/packages/pm_calc/translations/qt_zh_CN.qm b/packages/pm_calc/translations/qt_zh_CN.qm new file mode 100644 index 0000000000000000000000000000000000000000..5999a3477455eac6db4eba3169f8bbeb7b84287c GIT binary patch literal 3538 zcma);eQZ-z6u@uU>+5@6*Nwq8GWp|SM3LY?(V=5Ow~n!q^{s2`pbp1g+q>?u_Pyr4 z?vu!enP!UyFtRZx8j*l8B#0(N(GU|u5KM3kHPJsHAYhDQNC^I;hI;Pnxb5i2_Q!I& zd(ZED-E+=;)n5b`eRuod=!GSVzwS76`tnBzA@g9@R)<)Nkm&?M4J%-+ht&tGf|#QN z2<7iV%&k=*xf+>E?jghR}hpl8bZ^!Lr+=UVGCS0O&jXI6ia1LSVy z`z{s1Ib$p9fH?U@w!?pK0KXr#ow57?=jMXe>mbj6TQK4(1AU7VD?4QGx?=}Df7;)! z{}udbwx7QX@t7_YJ{&&={!A5~GaZJwKbPU~9%K?RE&AwR9Q;5m{FxnLRmT?iRZ=VI zxURlAiZv-Ft4f_Lh1HPBK-w$ZA5(;Bz~Sg@#Q4z2IZ9Yu8t#>G-z<=|`EuK4_bSiN zZ%tA(-y`*6A*Kqgk~Rxo^zzN-ErWxjcf*H5JdOqws$`+43PC9*39=&esam%ll>$c0 zR!38f$Fo(eajs7U`bMXBBgHJ6Bu$Z(5V4yk>3<=_Q^~xVaF|Hh>NGVf)}*A475|kA zUDYX)%0OmGo9C;s;La-FldkG`IhE&#MnSBp$_#M<-d#pO3fK+6KOpEmejUfMUzd`LIX%2$9%#3~0vd{{0H=?!kE`E-ZT%#hm!qW*&PXN>G+?l)y&ZX)ysje(G zk~!!da+gsXtS3h>cJZdyE+TQct9o;H%X$j&wNjv4sF$a&hWwauHAe0pAO-}78t#cC z+{;7^H_af}+5y3>8ij336K9F&-dNHhA|cfD%eoPLnmkA3@hR_oO4tpePS$XMCM^wv z_}xx_sn`BM{KW=buc=B*P&I*MBePu_v726b27bTtGF#1%b!);PkQ>5Kb9n#rLPH_yoR6#z5Re)jS0Am8cLp)gC1{W6CZej-@GMvd-Bw(Negna?fq( zajv}=Rf@|=IAdq2?MHlSj}VX)AwnD$q?iy<^_WnZ82Fu<6v28$W+&Wb-U6zJO*Z}l zmlGbWsHO(6u6tEATq|kD^S}|?&DT0qO7TY6jY_9VOymaLtfz{Cb^~-tT8xgv-1Nw$ zS2ao}%(~UEQ8HOU)-8+$Q^sgP9S-9dPMLAJ(cva)(K?Mz54)_KH95g4TWmZ@PFdIC zF-=x_b{)xil+-~wN|?J2W_#Pd4M0Ts8oBkbWC22Kk6`D~AuAJ`g+&8>! zxpzJ(QOeG5P&IiFhOY#EliJK}p4odPaD>9lMpZT*q3rG^2DXohv6L#9dwy7aV)Oec zrC}9u-<;}#a4B_RA>3?5!FE|%&U#9deu}CVk;3wz@u8VJucYN>1Zhq7W=@jvpYB>i zO|l*-5}l=8n7!eYPZi#)Ns1nw{yNTj58RHE4_tg + + + BaseDFOperationDialog + + + Preview + 预览 + + + + Save to Var + 保存到变量 + + + + Close + 关闭 + + + + Help + 帮助 + + + + CLASS_NAME + + + Warning + 警告 + + + + No data in workspace + 工作空间没有数据 + + + + DropNADialog + + + Position + 位置 + + + + How to drop + 去除方式 + + + + All + 所有 + + + + Any + 任意值 + + + + Drop by subset + 按列去除 + + + + Subset + 去除缺失值的列 + + + + In Place + 在本变量上更改 + + + + Drop NA: + 去除缺失值: + + + + 行 + + + + + 列 + + + + + FillNADialog + + + Replace Policy + 替换策略 + + + + User Defined Value + 自定义值 + + + + Fill Front or Back + 以前或后值填充 + + + + Value to replace + 要替换的值 + + + + Fill Direction + 填充方向 + + + + Front Fill + 以前一个值填充 + + + + Back Fill + 以后一个值填充 + + + + Fill Axis + 填充轴 + + + + By Row + 按行填充 + + + + By Column + 按列填充 + + + + Limit Maximum Fills + 限制每行/每列最大填充数量 + + + + Maximum Fills + 最大填充数量 + + + + In Place + 在本变量上更改 + + + + Fill NA: + 填充缺失值: + + + + MergeDialog + + + Warning + 警告 + + + + You can merge at most 6 data frames. + 最多可以合并6个数据集 + + + + No Data found in workspace! + 工作空间中无变量! + + + + Import Data, code: %s + 导入数据,代码为:%s + + + + PMPreprocessToolBar + + + Find/Replace + 查找/替换 + + + + Data Info + 数据信息 + + + + Column + 列名 + + + + Data Role + 数据角色 + + + + New Row + 新增行 + + + + New Column + 新增列 + + + + Delete Row + 删除行 + + + + Delete Column + 删除列 + + + + Missing Value + 缺失值处理 + + + + Sample + 抽样 + + + + Transpose + 转置 + + + + Vertical Merger + 纵向合并 + + + + Horizontal Merger + 横向合并 + + + + Join + 连接 + + + + Normalization + 标准化 + + + + Preprocess + 数据处理 + + + + Filter + 筛选 + + + + Data Partition + 数据分区 + + + + Drop Missing Value + 去除缺失值 + + + + Fill Missing Value + 填充缺失值 + + + + TransposeDialog + + + Copy + 复制 + + + + Transpose, command: + 转置,命令: + + + diff --git a/packages/pm_preprocess/fastui/base.py b/packages/pm_preprocess/fastui/base.py index 3db86376..33e9f0ae 100644 --- a/packages/pm_preprocess/fastui/base.py +++ b/packages/pm_preprocess/fastui/base.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- """ 这是定义基类的基础文件,里面是用代码生成方式来制作功能性面板的示例。比如 可以参阅同一目录下的其他文件。这些面板默认样式为悬浮在最上方,即使面板弹出,也可以操作主界面。 @@ -90,8 +89,11 @@ class BaseOperationDialog(QDialog): def get_help_content(self) -> str: """ - 获取帮助内容 + 生成帮助内容 + 为markdown格式 + + Notes:子类最好重写这个方法 Returns: """ @@ -100,7 +102,9 @@ class BaseOperationDialog(QDialog): def get_prompt_template(self) -> str: """ 获取提示模板 - :return: + + Notes:子类可以不重写这个方法 + Returns: """ return '' @@ -190,7 +194,9 @@ class DFOperationDialog(BaseOperationDialog): self.button_store.clicked.connect(self.store) # 储存 self.button_close.clicked.connect(self.close) # 关闭对话框 self.button_help.clicked.connect(self.help) # 显示帮助 - self.layout().addWidget(QLabel(self.tr('选择变量'))) + + self.hint_label = QLabel(self.tr('选择变量')) + self.layout().addWidget(self.hint_label) self.layout().addWidget(self.combo_box) self.layout().addWidget(self.panel) self.layout().addLayout(self.button_layout) diff --git a/pyminer_comm/data_client/data_client.py b/pyminer_comm/data_client/data_client.py index 33a7f8ea..671b20d6 100644 --- a/pyminer_comm/data_client/data_client.py +++ b/pyminer_comm/data_client/data_client.py @@ -227,7 +227,7 @@ def get_var_names(filter: str = '') -> typing.List[str]: Parameters ------------- - type_filter: str + filter: str 变量类型的字符表示 目前支持四种:string,table,array和numeric。使用table可以过滤出所有的二维array\pd.DataFrame 默认值为‘’也就是空字符串,此时将返回所有的变量名。 -- Gitee From e05a27adb8f7da2282c67b7988649cf5d47b7f7d Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Fri, 9 Apr 2021 11:47:06 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86pmgpanel?= =?UTF-8?q?=E4=B8=AD=E4=B8=8B=E6=8B=89=E5=88=97=E8=A1=A8=E6=A1=86=E4=B8=8E?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=A9=BA=E9=97=B4=E7=9A=84=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/pm_calc/fastui/dropna.py | 53 ---------------- packages/pm_calc/fastui/equation_solve.py | 3 + packages/pm_calc/fastui/fillna.py | 77 ----------------------- packages/pm_calc/fastui/matrix_calc.py | 3 + packages/pm_calc/fastui/matrix_inv.py | 3 + packages/pm_calc/fastui/matrix_numbers.py | 4 +- packages/pm_preprocess/main.py | 35 ----------- utils/ui/uiutil/workspaceutil.py | 31 +++++++++ 8 files changed, 43 insertions(+), 166 deletions(-) delete mode 100644 packages/pm_calc/fastui/dropna.py delete mode 100644 packages/pm_calc/fastui/fillna.py diff --git a/packages/pm_calc/fastui/dropna.py b/packages/pm_calc/fastui/dropna.py deleted file mode 100644 index 93e6e226..00000000 --- a/packages/pm_calc/fastui/dropna.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -这是一个去除缺失值的面板 - -运行方式:运行PyMiner后,直接运行此文件即可。 -需要确保PyMiner的工作空间中有pandas.DataFrame类型的数据。 - -# -*- coding:utf-8 -*- -# @Time: 2021/2/7 21:00 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: datamerge.py -""" -from PySide2.QtWidgets import QApplication - -if not __name__ == '__main__': - from .base import DFOperationDialog -else: - from base import DFOperationDialog - - -class DropNADialog(DFOperationDialog): - def __init__(self, ): - super(DropNADialog, self).__init__() - views = [ - ('combo_ctrl', 'axis', self.tr('去除方向'), 0, [0, 1], [self.tr('行'), self.tr('列')]), - ('combo_ctrl', 'how', self.tr('去除标准'), 'any', ['all', 'any'], [self.tr('该行/列数据全为缺失值'), - self.tr('该行/列任一数据为缺失值')]), - ('numberspin_ctrl', 'thresh', '保留非空值多于等于此的行/列', 1, '', (0, 1000), 1), - ('check_ctrl', 'use_subset', self.tr('按行列筛选'), False), - ('list_ctrl', 'subset', self.tr('筛选目标列'), [[], [], ], lambda: None), - ] - self.panel.set_items(views) - self.panel.set_as_controller('how', ['thresh'], 'all', 'enable') - self.panel.set_as_controller('use_subset', ['subset'], True, 'enable') - - def get_prompt_template(self) -> str: - return self.tr('Drop NA:') - - def get_value_code(self) -> str: - values = self.panel.get_value_with_filter() - varname = self.combo_box.currentText() - use_subset = values.pop('use_subset') - - code = '{varname}.dropna({args_str})'. \ - format(varname=varname, args_str=self.kwargs_to_str(values)) - return code - - -if __name__ == '__main__': - app = QApplication([]) - md = DropNADialog() - md.show() - app.exec_() diff --git a/packages/pm_calc/fastui/equation_solve.py b/packages/pm_calc/fastui/equation_solve.py index 756e7c00..46113673 100644 --- a/packages/pm_calc/fastui/equation_solve.py +++ b/packages/pm_calc/fastui/equation_solve.py @@ -1,6 +1,7 @@ from PySide2.QtWidgets import QApplication, QMessageBox from pyminer_comm import get_var_names +from utils import bind_panel_combo_ctrl_with_workspace if not __name__ == '__main__': from .base import DFOperationDialog @@ -30,6 +31,8 @@ class LinerEquationSolveDialog(DFOperationDialog): ('combo_ctrl', 'B', 'B', name_B, names) ] self.panel.set_items(views) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("A")) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("B")) def get_value_code(self) -> str: values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 diff --git a/packages/pm_calc/fastui/fillna.py b/packages/pm_calc/fastui/fillna.py deleted file mode 100644 index f5b475dd..00000000 --- a/packages/pm_calc/fastui/fillna.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/2/7 21:00 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: datamerge.py - - -# DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) -# value: 变量、字典、Series,DataFrame;用于填充缺失值,或指定为每个索引(对于Series)或列(对于DataFrame)的缺失值使用字典/Series/DataFrame的值填充 -# method: {'backfill', 'bfill', 'pad', 'ffill', None}, 默认None, pad/ffill表示向后填充空值,backfill/bfill表示向前填充空值 -# axis: {0 or 'index', 1 or 'columns'} -# inplace: boolean, 默认为False。若为True, 在原地填满 -# limit: int, 默认为None, 如果指定了方法, 则这是连续的NaN值的前向/后向填充的最大数量 -# downcast: dict, 默认None, 字典中的项为类型向下转换规则。 - -# 以上有关函数名称的解释来源于简书。 -# 作者:KissedbyFire -# 链接:https://www.jianshu.com/p/17cb2733a6d7 - - -from typing import List - -from pmgwidgets import PMGPanelDialog, PMGPanel -from pyminer_comm.base import is_pyminer_service_started -from pyminer_comm import get_var_names, get_var, set_var, run_command -from utils import VariableSelect, input_identifier -from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton - -if not __name__ == '__main__': - from .base import DFOperationDialog -else: - from base import DFOperationDialog - - - - -class FillNADialog(DFOperationDialog): - def __init__(self, ): - super(FillNADialog, self).__init__() - views = [ - ('combo_ctrl', 'replace_policy', self.tr('Replace Policy'), 1, [0, 1], - [self.tr('User Defined Value'), self.tr('Fill Front or Back')]), - ('line_ctrl', 'value', self.tr('Value to replace'), ''), - ('combo_ctrl', 'method', self.tr('Fill Direction'), 'ffill', ['ffill', 'bfill'], - [self.tr('Front Fill'), self.tr('Back Fill')]), - ('combo_ctrl', 'axis', self.tr('Fill Axis'), 0, [0, 1], [self.tr('By Row'), - self.tr('By Column')]), - - ('check_ctrl', 'with_limit', self.tr('Limit Maximum Fills'), True), - ('numberspin_ctrl', 'limit', self.tr('Maximum Fills'), 1, '', (0, 1000), 1), - ('check_ctrl', 'inplace', self.tr('In Place'), False), - ] - self.panel.set_items(views) - self.panel.set_as_controller('replace_policy', ['value'], 0, 'enable') - self.panel.set_as_controller('replace_policy', ['method', 'axis'], 1, 'enable') - self.panel.set_as_controller('with_limit', ['limit'], True, 'enable') - - def get_prompt_template(self) -> str: - return self.tr('Fill NA:') - - def get_value_code(self) -> str: - values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 - varname = self.combo_box.currentText() - policy = values.pop('replace_policy') - with_limit = values.pop('with_limit') - args_str = '' - for k, v in values.items(): - args_str += '{k}={v},'.format(k=k, v=repr(v)) - code = '{varname}.fillna({args})'.format(varname=varname, args=args_str) - return code - - -if __name__ == '__main__': - app = QApplication([]) - md = FillNADialog() - md.show() - app.exec_() diff --git a/packages/pm_calc/fastui/matrix_calc.py b/packages/pm_calc/fastui/matrix_calc.py index e8d0abdf..12b4752a 100644 --- a/packages/pm_calc/fastui/matrix_calc.py +++ b/packages/pm_calc/fastui/matrix_calc.py @@ -1,6 +1,7 @@ from PySide2.QtWidgets import QApplication, QMessageBox from pyminer_comm import get_var_names +from utils import bind_panel_combo_ctrl_with_workspace if not __name__ == '__main__': from .base import DFOperationDialog @@ -30,6 +31,8 @@ class MatrixCalcDialog(DFOperationDialog): ('combo_ctrl', 'B', 'B', name_B, names) ] self.panel.set_items(views) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("A")) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("B")) def get_value_code(self) -> str: values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 diff --git a/packages/pm_calc/fastui/matrix_inv.py b/packages/pm_calc/fastui/matrix_inv.py index 3b23f194..f97082a8 100644 --- a/packages/pm_calc/fastui/matrix_inv.py +++ b/packages/pm_calc/fastui/matrix_inv.py @@ -1,6 +1,7 @@ from PySide2.QtWidgets import QApplication, QMessageBox from pyminer_comm import get_var_names +from utils import bind_panel_combo_ctrl_with_workspace if not __name__ == '__main__': from .base import DFOperationDialog @@ -28,7 +29,9 @@ class MatrixInvDialog(DFOperationDialog): ('combo_ctrl', 'mat', '矩阵 (numpy数组)', name_A, names), # ('combo_ctrl', 'B', 'B', name_B, names) ] + self.panel.set_items(views) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("mat")) def get_value_code(self) -> str: values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 diff --git a/packages/pm_calc/fastui/matrix_numbers.py b/packages/pm_calc/fastui/matrix_numbers.py index 7d994962..bb948cf9 100644 --- a/packages/pm_calc/fastui/matrix_numbers.py +++ b/packages/pm_calc/fastui/matrix_numbers.py @@ -1,7 +1,7 @@ from PySide2.QtWidgets import QApplication, QMessageBox from pyminer_comm import get_var_names - +from utils import bind_panel_combo_ctrl_with_workspace if not __name__ == '__main__': from .base import DFOperationDialog else: @@ -27,7 +27,9 @@ class MatrixNumbersDialog(DFOperationDialog): ["范数(当前仅支持2阶范数)", '条件数', '行列式', '秩', '行列式符号和自然对数', '对角线和']), ('combo_ctrl', 'mat', '矩阵 (numpy数组)', name_A, names), ] + self.panel.set_items(views) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("mat")) def get_value_code(self) -> str: values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 diff --git a/packages/pm_preprocess/main.py b/packages/pm_preprocess/main.py index f241695e..9278d16d 100644 --- a/packages/pm_preprocess/main.py +++ b/packages/pm_preprocess/main.py @@ -198,41 +198,6 @@ class PMPreprocessToolBar(PMGToolBar): def show_data_replace(self): self.data_replace = DataReplaceForm() self.data_replace.show() - # - # def show_data_info(self): - # self.data_info=preprocess.DataInfoForm() - # self.data_info.show() - # - # def show_data_column(self): - # self.data_column=preprocess.DataColumnDescForm() - # self.data_column.show() - # - # def show_data_role(self): - # self.data_role=preprocess.DataRoleForm() - # self.data_role.show() - # - # def show_data_partition(self): - # self.data_partition=preprocess.DataPartitionForm() - # self.data_partition.show() - # - # def show_data_add_row(self): - # self.data_add_row=preprocess.DataNewColumnForm() - # self.data_add_row.show() - # - # - # - # def show_data_add_column(self): - # self.data_add_column=preprocess.DataNewColumnForm() - # self.data_add_column.show() - # - # def show_data_delete_row(self): - # self.data_delete_row=preprocess.DataDeleteRowForm() - # self.data_delete_row.show() - # - # def show_data_delete_column(self): - # self.data_delete_column=preprocess.DataDeleteColumnForm() - # self.data_delete_column.show() - class Extension(BaseExtension): if TYPE_CHECKING: diff --git a/utils/ui/uiutil/workspaceutil.py b/utils/ui/uiutil/workspaceutil.py index b8ed41ef..09206b40 100644 --- a/utils/ui/uiutil/workspaceutil.py +++ b/utils/ui/uiutil/workspaceutil.py @@ -1,3 +1,4 @@ +from pmgwidgets import PMGComboCtrl from PySide2.QtWidgets import QComboBox, QInputDialog, QWidget, QLineEdit, QMessageBox @@ -65,3 +66,33 @@ def bind_combo_with_workspace(combo: QComboBox, type_filter: str = ''): QComboBox.mousePressEvent(combo, event) combo.mousePressEvent = on_combo_var_name_mouse_pressed + +def bind_panel_combo_ctrl_with_workspace(combo_ctrl: PMGComboCtrl, type_filter: str = ''): + """ + 将pmgpanel 中的 下拉列表框PMGComboCtrl与工作空间的变量变更绑定起来。自动获取相应的变量名。 + + :param combo: + :param type_filter: 变量类型的字符表示 + 目前支持四种:string,table,array和numeric。使用table可以过滤出所有的二维array\pd.DataFrame + 默认值为‘’也就是空字符串,此时将返回所有的变量名。 + :return: + """ + from pyminer_comm import get_var_names + combo = combo_ctrl.check + def on_combo_var_name_mouse_pressed(event): + """ + combo box在点击(菜单未弹出)的时候,从PyMiner主程序获取全部符合要求的变量名。 + 同时需要调用QComboBox的mousePressEvent事件,保证选单正常弹出。 + :return: + """ + var_names = get_var_names(filter=type_filter) + + last_item_text = combo.currentText() + + combo.clear() + combo_ctrl.set_choices(var_names) + if last_item_text in var_names: + combo.setCurrentIndex(var_names.index(last_item_text)) + QComboBox.mousePressEvent(combo, event) + + combo.mousePressEvent = on_combo_var_name_mouse_pressed -- Gitee From 739ea34ed0799703475c5244965e636df2886c3c Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Fri, 9 Apr 2021 12:36:20 +0800 Subject: [PATCH 03/27] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=95=B0?= =?UTF-8?q?=E5=80=BC=E7=A7=AF=E5=88=86=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ipython_console/initialize.py | 6 +- packages/pm_calc/fastui/base.py | 8 ++ .../fastui/helps/numerical_integration.md | 12 +++ .../pm_calc/fastui/numerical_integration.py | 53 +++++++++ packages/pm_calc/fastui/templates/dropna.json | 18 ---- packages/pm_calc/fastui/templates/dropna.py | 68 ------------ packages/pm_calc/fastui/templates/template.py | 101 ------------------ packages/pm_calc/main.py | 7 ++ 8 files changed, 85 insertions(+), 188 deletions(-) create mode 100644 packages/pm_calc/fastui/helps/numerical_integration.md create mode 100644 packages/pm_calc/fastui/numerical_integration.py delete mode 100644 packages/pm_calc/fastui/templates/dropna.json delete mode 100644 packages/pm_calc/fastui/templates/dropna.py delete mode 100644 packages/pm_calc/fastui/templates/template.py diff --git a/packages/ipython_console/initialize.py b/packages/ipython_console/initialize.py index d42a5766..c54a546d 100644 --- a/packages/ipython_console/initialize.py +++ b/packages/ipython_console/initialize.py @@ -8,6 +8,7 @@ import types import numpy as np import matplotlib.pyplot as plt import pandas as pd +import scipy.integrate import ast from IPython.core.magic import register_line_magic, register_cell_magic, register_line_cell_magic from core import * @@ -274,7 +275,8 @@ def __filter_vars(__data: dict) -> dict: """ __ip = get_ipython() return {__k: __v for __k, __v in __data.items() if not ( - callable(__v) or __k.startswith('_') or isinstance(__v, types.ModuleType) or __k in __ip.builtin_constants)} + __k.startswith('_') or isinstance(__v, types.ModuleType) or __k in __ip.builtin_constants + or __k in __ip.builtin_values.keys())} def __delete_var(__var_name: str): @@ -433,6 +435,8 @@ def __load_vars(): __init_server() +__ip.builtin_values = {__k: __v for __k, __v in globals().items() if not __k.startswith('__')} + __ip.filter_vars = __filter_vars __ip.delete_var = __delete_var __ip.clear_all = __clear_all diff --git a/packages/pm_calc/fastui/base.py b/packages/pm_calc/fastui/base.py index 33e9f0ae..65bbe5b4 100644 --- a/packages/pm_calc/fastui/base.py +++ b/packages/pm_calc/fastui/base.py @@ -30,9 +30,11 @@ pd.concat函数有返回值。在点击“preview” @Email: 1295752786@qq.com @File: pmgui.py """ +import os from abc import abstractmethod from typing import List +import chardet from PySide2.QtCore import Qt, QCoreApplication, Signal from pmgwidgets import PMGPanel, PMGOneShotThreadRunner from pyminer_comm import get_var_names, run_command, call_interface @@ -51,6 +53,7 @@ class BaseOperationDialog(QDialog): def __init__(self): self.thrunner: PMGOneShotThreadRunner = None + self.help_file_path: str = "" super(BaseOperationDialog, self).__init__() def store(self): @@ -85,6 +88,7 @@ class BaseOperationDialog(QDialog): textBrowser = QTextBrowser(self) dlg.layout().addWidget(textBrowser) textBrowser.setMarkdown(self.get_help_content()) + dlg.setWindowFlags(dlg.windowFlags() | Qt.WindowStaysOnTopHint) dlg.exec_() def get_help_content(self) -> str: @@ -97,6 +101,10 @@ class BaseOperationDialog(QDialog): Returns: """ + if os.path.exists(self.help_file_path): + with open(self.help_file_path, "rb") as f: + ret = f.read() + return ret.decode(chardet.detect(ret)["encoding"]) return """# 帮助\n\n暂未定义帮助""" def get_prompt_template(self) -> str: diff --git a/packages/pm_calc/fastui/helps/numerical_integration.md b/packages/pm_calc/fastui/helps/numerical_integration.md new file mode 100644 index 00000000..7a08c9eb --- /dev/null +++ b/packages/pm_calc/fastui/helps/numerical_integration.md @@ -0,0 +1,12 @@ +# 数值积分 +## 说明 +- 被积函数——工作空间中的一个函数。对于一般定积分(单积分)的场合。被积函数应有一个参数,一个返回值。比如,y = f(x) = x^2可以用如下函数方式表示。 +在被积函数选择框中,选择函数y即可。 +``` + def y(x): + return x**2 +``` + + +- 下限和上限 + - 用户输入数值。 diff --git a/packages/pm_calc/fastui/numerical_integration.py b/packages/pm_calc/fastui/numerical_integration.py new file mode 100644 index 00000000..3a45bcd5 --- /dev/null +++ b/packages/pm_calc/fastui/numerical_integration.py @@ -0,0 +1,53 @@ +import os + +from PySide2.QtWidgets import QApplication, QMessageBox + +from pyminer_comm import get_var_names +from utils import bind_panel_combo_ctrl_with_workspace + +if not __name__ == '__main__': + from .base import DFOperationDialog +else: + from base import DFOperationDialog + + +class NumericalIntegrationDialog(DFOperationDialog): + def __init__(self, ): + super(NumericalIntegrationDialog, self).__init__() + self.setWindowTitle("数值积分") + self.combo_box.hide() + self.hint_label.hide() + names = get_var_names() + self.help_file_path = os.path.join(os.path.dirname(__file__), "helps", "numerical_integration.md") + + if len(names) == 0: + QMessageBox.warning(self, self.tr('Warning'), self.tr('No Data found in workspace!')) + return + else: + name = names[0] + views = [ + ('combo_ctrl', 'calc_type', self.tr('积分类型'), "quad", + ["quad"], # "dblquad"], + ["一般定积分"]), # '双重积分']), + ('combo_ctrl', 'f', '被积函数', name, names), + ('number_ctrl', 'a', '下限', 0, '',), + ('number_ctrl', 'b', '上限', 1, '',), + + ] + + self.panel.set_items(views) + bind_panel_combo_ctrl_with_workspace(self.panel.get_ctrl("f")) + + def get_value_code(self) -> str: + values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 + f = values.pop("f") + calc_type = values.pop("calc_type") + return "scipy.integrate.{func_name}({f},{args})".format(func_name=calc_type, f=f, + args=self.kwargs_to_str(values)) + + +if __name__ == '__main__': + app = QApplication([]) + md = NumericalIntegrationDialog() + md.show() + app.exec_() diff --git a/packages/pm_calc/fastui/templates/dropna.json b/packages/pm_calc/fastui/templates/dropna.json deleted file mode 100644 index 67b64101..00000000 --- a/packages/pm_calc/fastui/templates/dropna.json +++ /dev/null @@ -1,18 +0,0 @@ -{"file_name": "dropna.py", - "operation_name": "Drop NA", - "class_name": "DropNA", - "params": [ - ["combo_ctrl", "axis", "Position", 0, [0, 1], ["行", "列"]], - ["combo_ctrl", "how", "How to drop", "any", ["all", "any"], ["All", "Any"]], - ["numberspin_ctrl", "thresh", "保留非空值多于等于此的行/列", 1, "", [0, 1000], 1], - ["check_ctrl", "use_subset", "Drop by subset", true], - ["list_ctrl", "subset", "Subset", [[], [] ], null], - ["check_ctrl", "inplace", "In Place", false] - ], - "rules": [ - ["use_subset",["subset"],true,"enable"], - ["how",["thresh"],"any","enable"] - ], - "rule_widgets": - ["use_subset","number"] -} \ No newline at end of file diff --git a/packages/pm_calc/fastui/templates/dropna.py b/packages/pm_calc/fastui/templates/dropna.py deleted file mode 100644 index 0b45f870..00000000 --- a/packages/pm_calc/fastui/templates/dropna.py +++ /dev/null @@ -1,68 +0,0 @@ - -from typing import List - -from pmgwidgets import PMGPanelDialog, PMGPanel -from pyminer_comm.base import is_pyminer_service_started -from pyminer_comm import get_var_names, get_var, set_var, run_command -from utils import VariableSelect, input_identifier -from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton,QComboBox - - -class CLASS_NAME(QDialog): - def __init__(self, ): - super(CLASS_NAME, self).__init__() - self.setLayout(QVBoxLayout()) - names = get_var_names() - if len(names) == 0: - QMessageBox.warning(self, self.tr('Warning'), self.tr('No data in workspace')) - self.close() - return - self.combo_box = QComboBox() - self.combo_box.addItems(names) - self.combo_box.setCurrentIndex(0) - views = [['combo_ctrl', 'axis', 'Position', 0, [0, 1], ['行', '列']], ['combo_ctrl', 'how', 'How to drop', 'any', ['all', 'any'], ['All', 'Any']], ['numberspin_ctrl', 'thresh', '保留非空值多于等于此的行/列', 1, '', [0, 1000], 1], ['check_ctrl', 'use_subset', 'Drop by subset', True], ['list_ctrl', 'subset', 'Subset', [[], []], None], ['check_ctrl', 'inplace', 'In Place', False]] - self.panel = PMGPanel(views=views) - self.panel.set_as_controller('use_subset',['subset'],True,'enable',) - self.panel.set_as_controller('how',['thresh'],'any','enable',) - - - self.button_box = QDialogButtonBox() - self.button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Help) - self.button_box.accepted.connect(self.accept) - self.button_box.rejected.connect(self.close) - - self.layout().addWidget(self.panel) - self.layout().addWidget(self.button_box) - - def accept(self) -> None: - - code = self.get_code() - if code != '': - run_command(command=code, hint_text='Drop NA, command: ' + code, hidden=False) - super().accept() - - def get_code(self) -> str: - values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 - varname = self.combo_box.currentText() - values.pop('use_subset') - values.pop('number') - - args_str = '' - for k, v in values.items(): - args_str += '{k}={v},'.format(k=k, v=repr(v)) - return '{varname}.fillna({args})'.format(varname=varname, args=args_str) - - if not values['inplace']: - identifier = input_identifier(parent=self, default_name=varname) - if identifier != '': - code = identifier + ' = ' + code - else: - return '' - return code - - -if __name__ == '__main__': - app = QApplication([]) - md = CLASS_NAME() - md.show() - app.exec_() diff --git a/packages/pm_calc/fastui/templates/template.py b/packages/pm_calc/fastui/templates/template.py deleted file mode 100644 index 8b9b0a01..00000000 --- a/packages/pm_calc/fastui/templates/template.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding:utf-8 -*- -# @Time: 2021/2/8 13:01 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: template.py.py - -# -*- coding:utf-8 -*- -# @Time: 2021/2/7 21:00 -# @Author: Zhanyi Hou -# @Email: 1295752786@qq.com -# @File: datamerge.py -code = """ -from typing import List - -from pmgwidgets import PMGPanelDialog, PMGPanel -from pyminer_comm.base import is_pyminer_service_started -from pyminer_comm import get_var_names, get_var, set_var, run_command -from pmtoolbox import VariableSelect, input_identifier -from PySide2.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QSpinBox, QApplication, QMessageBox, QPushButton,QComboBox - - -class CLASS_NAME(QDialog): - def __init__(self, ): - super(CLASS_NAME, self).__init__() - self.setLayout(QVBoxLayout()) - names = get_var_names() - if len(names) == 0: - QMessageBox.warning(self, self.tr('Warning'), self.tr('No data in workspace')) - self.close() - return - self.combo_box = QComboBox() - self.combo_box.addItems(names) - self.combo_box.setCurrentIndex(0) - views = %s - self.panel = PMGPanel(views=views) -%s - - self.button_box = QDialogButtonBox() - self.button_box.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Help) - self.button_box.accepted.connect(self.accept) - self.button_box.rejected.connect(self.close) - - self.layout().addWidget(self.panel) - self.layout().addWidget(self.button_box) - - def accept(self) -> None: - - code = self.get_code() - if code != '': - run_command(command=code, hint_text='Drop NA, command: ' + code, hidden=False) - super().accept() - - def get_code(self) -> str: - values = self.panel.get_value_with_filter() # 只获取使能并且可见的控件的值 - varname = self.combo_box.currentText() -%s - args_str = '' - for k, v in values.items(): - args_str += '{k}={v},'.format(k=k, v=repr(v)) - return '{varname}.fillna({args})'.format(varname=varname, args=args_str) - - if not values['inplace']: - identifier = input_identifier(parent=self, default_name=varname) - if identifier != '': - code = identifier + ' = ' + code - else: - return '' - return code - - -if __name__ == '__main__': - app = QApplication([]) - md = CLASS_NAME() - md.show() - app.exec_() -""" -# print(code) -import json - -with open('dropna.json', 'rb') as f: - d = json.load(f) -params = repr(d['params']) -rule_widgets = d['rule_widgets'] -pop_rule_widgets_setence = '' -for w_name in rule_widgets: - pop_rule_widgets_setence += ' values.pop(\'%s\')\n' % w_name -# print(params) - -show_rules_setence = '' -for rule in d['rules']: - r = '' - print(rule) - for text in rule: - r += repr(text) + ',' - show_rules_setence += ' self.panel.set_as_controller(%s)\n' % r - -code = code % (params, show_rules_setence, pop_rule_widgets_setence) -print(code) -# exec(code) -with open(d['file_name'], 'w', encoding='utf8') as f: - f.write(code) diff --git a/packages/pm_calc/main.py b/packages/pm_calc/main.py index a059a839..d7f293a5 100644 --- a/packages/pm_calc/main.py +++ b/packages/pm_calc/main.py @@ -17,6 +17,7 @@ from .fastui.matrix_calc import MatrixCalcDialog from .fastui.matrix_inv import MatrixInvDialog from .fastui.equation_solve import LinerEquationSolveDialog from .fastui.matrix_numbers import MatrixNumbersDialog +from .fastui.numerical_integration import NumericalIntegrationDialog logger = logging.getLogger(__name__) if TYPE_CHECKING: @@ -67,6 +68,8 @@ class PMCalcToolBar(PMGToolBar): self.addSeparator() + self.add_tool_button('button_numerical_integration', self.tr('数值积分'), self.tr('对函数进行积分'), # 矩阵计算 + create_icon(_j(resource_path, "equation_solve.png"))) def get_toolbar_text(self) -> str: return "计算" @@ -93,6 +96,7 @@ class PMCalcToolBar(PMGToolBar): "matrix_inv": MatrixInvDialog, "linear_equations": LinerEquationSolveDialog, "matrix_numbers": MatrixNumbersDialog, + "numerical_integration": NumericalIntegrationDialog } if window_name in self.op_windows.keys(): self.op_windows[window_name].deleteLater() @@ -111,6 +115,9 @@ class PMCalcToolBar(PMGToolBar): self.get_control_widget('button_matrix_inv').clicked.connect(lambda: self.show_window("matrix_inv")) self.get_control_widget('button_matrix_numbers').clicked.connect(lambda: self.show_window("matrix_numbers")) + self.get_control_widget('button_numerical_integration').clicked.connect( + lambda: self.show_window("numerical_integration")) + self.extension_lib.Signal.get_close_signal().connect(self.on_close) def slot_var_reload(self, str, dict): -- Gitee From bda1e6af158bd5e8eb5428d0dc865f2c28918951 Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Fri, 9 Apr 2021 15:51:02 +0800 Subject: [PATCH 04/27] =?UTF-8?q?=E5=88=A0=E9=99=A4qtpy=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app2.py | 5 +++-- core/algorithms/plotting/graph.py | 2 +- features/ui/pmwidgets/pmmainwindow.py | 2 +- .../codeeditor/qtpyeditor/Utilities/autocomp.py | 2 +- .../qtpyeditor/codeedit/basecodeedit.py | 8 ++++---- .../qtpyeditor/codeedit/pythonedit.py | 6 +++--- .../qtpyeditor/codeeditor/abstracteditor.py | 4 ++-- .../qtpyeditor/codeeditor/baseeditor.py | 6 +++--- .../qtpyeditor/codeeditor/pythoneditor.py | 2 +- .../codeeditor/qtpyeditor/find_gotoline.py | 2 +- .../qtpyeditor/highlighters/python.py | 6 +++--- .../codeeditor/qtpyeditor/linenumber.py | 8 ++++---- .../codeeditor/qtpyeditor/ui/findinpath.py | 4 ++-- .../codeeditor/qtpyeditor/ui/ui_formeditor.py | 2 +- .../codeeditor/qtpyeditor/ui/ui_gotoline.py | 2 +- pmgui.py | 6 +++--- pmgwidgets/display/browser/browser.py | 6 +++--- .../display/dynamicgraph/base/basetimeseries.py | 4 ++-- pmgwidgets/display/matplotlib/pmagg.py | 4 ++-- .../matplotlib/pyqtgraph/pyqtgraphwidget.py | 4 ++-- pmgwidgets/display/matplotlib/qt5agg.py | 6 +++--- pmgwidgets/docs/threading_and_tasking.md | 6 +++--- pmgwidgets/elements/dockobject.py | 2 +- pmgwidgets/elements/toolbar.py | 6 +++--- pmgwidgets/flowchart/core/flow_content.py | 6 +++--- pmgwidgets/flowchart/core/flow_items.py | 17 ++++++++--------- pmgwidgets/flowchart/core/flow_node.py | 10 +++++----- pmgwidgets/flowchart/core/flowchart_scene.py | 6 +++--- pmgwidgets/flowchart/core/flowchart_widget.py | 6 +++--- pmgwidgets/flowchart/core/nodemanager.py | 6 +++--- pmgwidgets/flowchart/core/utils.py | 2 +- pmgwidgets/flowchart/dataprocesswidget.py | 6 +++--- .../nodes/dataframeoperation/randomrowsample.py | 2 +- pmgwidgets/flowchart/nodes/io/iterator.py | 2 +- pmgwidgets/flowchart/nodes/io/listdir.py | 2 +- pmgwidgets/flowchart/nodes/io/pdimport.py | 2 +- pmgwidgets/flowchart/nodes/random.py | 2 +- pmgwidgets/flowchart/nodes/simplecalc.py | 2 +- pmgwidgets/flowchart/simulationwidget.py | 6 +++--- .../flowchart/tests/continously_data_process.py | 4 ++-- pmgwidgets/flowchart/tests/database_import.py | 4 ++-- pmgwidgets/flowchart/tests/fault_tree.py | 4 ++-- pmgwidgets/flowchart/tests/node_test.py | 2 +- pmgwidgets/utilities/network/qtclient.py | 4 ++-- pmgwidgets/utilities/network/server.py | 4 ++-- .../utilities/platform/filesyswatchdog.py | 6 +++--- pmgwidgets/utilities/platform/translation.py | 4 ++-- pmgwidgets/utilities/source/iconutils.py | 2 +- pmgwidgets/utilities/source/translation.py | 4 ++-- pmgwidgets/utilities/uilogics/drags.py | 2 +- .../utilities/uilogics/tasks/loop_background.py | 8 ++++---- .../utilities/uilogics/tasks/minimal_thread.py | 8 ++++---- .../uilogics/tasks/one_shot_background.py | 8 ++++---- pmgwidgets/utilities/uilogics/tasks/threads.py | 6 +++--- pmgwidgets/utilities/uilogics/windowutils.py | 4 ++-- pmgwidgets/widgets/basic/browsers/browser.py | 6 +++--- .../widgets/basic/buttons/button/toolbutton.py | 8 ++++---- .../basic/buttons/buttonpane/pushbuttonpane.py | 6 +++--- pmgwidgets/widgets/basic/containers/PMTab.py | 2 +- pmgwidgets/widgets/basic/containers/flowarea.py | 8 ++++---- .../widgets/basic/containers/flowlayout.py | 2 +- .../widgets/basic/containers/pmdockwidget.py | 2 +- .../widgets/basic/containers/pmscrollarea.py | 4 ++-- .../widgets/basic/containers/pmtoolbox.py | 2 +- pmgwidgets/widgets/basic/dialogs/textdialog.py | 2 +- pmgwidgets/widgets/basic/images/imageview.py | 2 +- .../widgets/basic/images/imageviewitem.py | 6 +++--- pmgwidgets/widgets/basic/labels/scrolllabel.py | 6 +++--- pmgwidgets/widgets/basic/lists/combobasic.py | 6 +++--- pmgwidgets/widgets/basic/others/console.py | 6 +++--- pmgwidgets/widgets/basic/others/gauge.py | 6 +++--- .../widgets/basic/others/instantbootconsole.py | 8 ++++---- .../widgets/basic/others/processconsole.py | 6 +++--- .../widgets/basic/plots/bars/histogram.py | 2 +- .../widgets/basic/plots/lines/timeseries.py | 10 +++++----- .../basic/plots/matplotlib/base/pmaggplot.py | 4 ++-- .../basic/plots/matplotlib/base/qt5aggplot.py | 6 +++--- .../basic/plots/pyqtgraph/base/pgplot.py | 2 +- .../widgets/basic/plots/scatters/scatters.py | 2 +- pmgwidgets/widgets/basic/quick/demo1.py | 6 +++--- pmgwidgets/widgets/basic/tables/tableviews.py | 8 ++++---- pmgwidgets/widgets/basic/tables/tablewidgets.py | 6 +++--- .../basic/texts/statusreport/errroreport.py | 2 +- .../widgets/basic/texts/webeditors/editor.py | 14 +++++++------- pmgwidgets/widgets/basic/trees/filetree.py | 6 +++--- pmgwidgets/widgets/basic/trees/jsontree.py | 6 +++--- pmgwidgets/widgets/basic/trees/treecheck.py | 4 ++-- pmgwidgets/widgets/basic/trees/varattrtree.py | 6 +++--- pmgwidgets/widgets/composited/buttonpanel.py | 2 +- pmgwidgets/widgets/composited/generalpanel.py | 8 ++++---- .../widgets/extended/base/baseextendedwidget.py | 4 ++-- .../widgets/extended/checkbuttons/check.py | 2 +- pmgwidgets/widgets/extended/comboboxes/combo.py | 2 +- .../widgets/extended/entries/baseentryctrl.py | 2 +- .../widgets/extended/entries/colorctrl.py | 4 ++-- pmgwidgets/widgets/extended/entries/evalctrl.py | 2 +- pmgwidgets/widgets/extended/entries/filectrl.py | 2 +- .../widgets/extended/entries/folderctrl.py | 2 +- .../widgets/extended/entries/keymappingctrl.py | 6 +++--- pmgwidgets/widgets/extended/entries/linectrl.py | 2 +- pmgwidgets/widgets/extended/entries/numctrl.py | 2 +- .../widgets/extended/entries/passwordctrl.py | 2 +- pmgwidgets/widgets/extended/labels/label.py | 2 +- pmgwidgets/widgets/extended/lists/listwgt.py | 4 ++-- .../widgets/extended/plots/lines/timeseries.py | 2 +- pmgwidgets/widgets/extended/spins/datetime.py | 4 ++-- pmgwidgets/widgets/extended/spins/numberspin.py | 2 +- pmgwidgets/widgets/extended/tables/rulesctrl.py | 4 ++-- pmgwidgets/widgets/extended/tables/tableshow.py | 6 +++--- 109 files changed, 247 insertions(+), 247 deletions(-) diff --git a/app2.py b/app2.py index 83807c7d..ac3fc7f0 100644 --- a/app2.py +++ b/app2.py @@ -4,7 +4,7 @@ 命令行的调出:在Windows系统,启动后会自动隐藏命令行窗口。若要保持命令行窗口的显示,请使用-d选项: python.exe app2.py -d """ -import PySide2 + import ctypes import os import platform @@ -24,12 +24,14 @@ sys.path.append(os.path.dirname(__file__)) cgitb.enable(format='text') original_handler = cgitb.handler +import PySide2 dirname = os.path.dirname(PySide2.__file__) plugin_path = os.path.join(dirname, 'plugins', 'platforms') os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path os.environ['QT_API'] = 'pyside2' os.environ['PYQTGRAPH_QT_LIB'] = 'PySide2' +os.environ['FORCE_QT_API'] = "1" def exception_handler(i: 'Tuple[ClassVar[BaseException], BaseException]'): @@ -194,7 +196,6 @@ class MainWindow(BaseMainWindow): self.statusBar.showMessage(version, 0) self.setStatusBar(self.statusBar) - self.init_toolbar_tab() tb_home = PMToolBarHome() self.add_toolbar('toolbar_home', tb_home, text=tb_home.get_toolbar_text()) diff --git a/core/algorithms/plotting/graph.py b/core/algorithms/plotting/graph.py index 47199c51..cccadcf5 100644 --- a/core/algorithms/plotting/graph.py +++ b/core/algorithms/plotting/graph.py @@ -5,7 +5,7 @@ # @Site : # @File : graph.py # @Software: PyCharm -from qtpy.QtWidgets import QWidget +from PySide2.QtWidgets import QWidget from packages.pmagg.PMAgg import Window from packages.graph_agg.graph_agg import GraphAgg import matplotlib.pyplot as plt diff --git a/features/ui/pmwidgets/pmmainwindow.py b/features/ui/pmwidgets/pmmainwindow.py index 511056f9..0c2060b1 100644 --- a/features/ui/pmwidgets/pmmainwindow.py +++ b/features/ui/pmwidgets/pmmainwindow.py @@ -178,7 +178,7 @@ class BaseMainWindow(QMainWindow): layout_path = os.path.join(Settings.get_instance().settings_path, 'layout.ini') try: with open(layout_path, 'wb') as f: - s = b''#self.saveState() + s = b'' # self.saveState() f.write(s) except FileNotFoundError: logging.warning("file not found:" + layout_path) diff --git a/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py b/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py index 79c069c2..19459e43 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py +++ b/packages/code_editor/codeeditor/qtpyeditor/Utilities/autocomp.py @@ -6,7 +6,7 @@ import re import time import logging -from qtpy.QtCore import QThread, Signal +from PySide2.QtCore import QThread, Signal logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py b/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py index 39555963..f477177b 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py +++ b/packages/code_editor/codeeditor/qtpyeditor/codeedit/basecodeedit.py @@ -12,12 +12,12 @@ from queue import Queue from PySide2.QtGui import QDropEvent, QPixmap -from qtpy.QtWidgets import QAction -from qtpy.QtCore import QRegExp, Qt, QModelIndex, Signal, QThread, QCoreApplication, QTimer, QUrl, QSize -from qtpy.QtWidgets import QApplication, QFileDialog, QTextEdit, QTabWidget, \ +from PySide2.QtWidgets import QAction +from PySide2.QtCore import QRegExp, Qt, QModelIndex, Signal, QThread, QCoreApplication, QTimer, QUrl, QSize +from PySide2.QtWidgets import QApplication, QFileDialog, QTextEdit, QTabWidget, \ QMessageBox, QListWidget, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QPlainTextEdit, QShortcut, \ QTableWidget, QTableWidgetItem, QHeaderView -from qtpy.QtGui import QTextCursor, QKeyEvent, QMouseEvent, QIcon, QKeySequence, QFocusEvent, QColor, QTextFormat, \ +from PySide2.QtGui import QTextCursor, QKeyEvent, QMouseEvent, QIcon, QKeySequence, QFocusEvent, QColor, QTextFormat, \ QPainter, QTextDocument, QTextBlock from typing import List, Tuple, Dict, TYPE_CHECKING diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py b/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py index a3eaf48b..5a2af553 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py +++ b/packages/code_editor/codeeditor/qtpyeditor/codeedit/pythonedit.py @@ -8,9 +8,9 @@ import time import re from typing import Tuple, List, TYPE_CHECKING -from qtpy.QtGui import QTextCursor, QMouseEvent, QKeyEvent, QTextBlock -from qtpy.QtWidgets import QLabel, QListWidgetItem, QApplication -from qtpy.QtCore import QPoint, QModelIndex, Signal +from PySide2.QtGui import QTextCursor, QMouseEvent, QKeyEvent, QTextBlock +from PySide2.QtWidgets import QLabel, QListWidgetItem, QApplication +from PySide2.QtCore import QPoint, QModelIndex, Signal from packages.code_editor.codeeditor.qtpyeditor.codeedit import PMBaseCodeEdit from packages.code_editor.codeeditor.qtpyeditor.highlighters import PythonHighlighter diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py index b2a79e5e..810b8735 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py +++ b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/abstracteditor.py @@ -42,8 +42,8 @@ import time from itertools import groupby from typing import TYPE_CHECKING, List, Iterable, Dict, Set, Tuple, Any -from qtpy.QtCore import QDir -from qtpy.QtWidgets import QWidget, QMessageBox +from PySide2.QtCore import QDir +from PySide2.QtWidgets import QWidget, QMessageBox from pmgwidgets import in_unit_test diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py index 41cf8725..bbf58f66 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py +++ b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/baseeditor.py @@ -41,9 +41,9 @@ import re import time from itertools import groupby from typing import TYPE_CHECKING, List, Iterable, Dict, Set, Tuple, Any -from qtpy.QtGui import QIcon, QKeySequence, QTextDocument, QTextCursor, QTextBlock, QDropEvent -from qtpy.QtCore import QDir, QCoreApplication, Qt, QPoint, Signal, QTranslator, QLocale, QUrl -from qtpy.QtWidgets import QWidget, QMessageBox, QFileDialog, QAction, QShortcut, QDialog, QVBoxLayout, QPushButton, \ +from PySide2.QtGui import QIcon, QKeySequence, QTextDocument, QTextCursor, QTextBlock, QDropEvent +from PySide2.QtCore import QDir, QCoreApplication, Qt, QPoint, Signal, QTranslator, QLocale, QUrl +from PySide2.QtWidgets import QWidget, QMessageBox, QFileDialog, QAction, QShortcut, QDialog, QVBoxLayout, QPushButton, \ QHBoxLayout, QApplication, QLabel from pmgwidgets import in_unit_test diff --git a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py index c1c6a36d..140c6f69 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py +++ b/packages/code_editor/codeeditor/qtpyeditor/codeeditor/pythoneditor.py @@ -14,7 +14,7 @@ # @Email: 1295752786@qq.com # @File: editor.py -from qtpy.QtWidgets import QApplication, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QTextBrowser +from PySide2.QtWidgets import QApplication, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout, QLabel, QTextBrowser from typing import Dict from packages.code_editor.codeeditor.qtpyeditor.codeeditor import PMGBaseEditor from packages.code_editor.codeeditor.qtpyeditor.codeedit import PMBaseCodeEdit, PMPythonCodeEdit diff --git a/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py b/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py index 0f7639e6..617dd324 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py +++ b/packages/code_editor/codeeditor/qtpyeditor/find_gotoline.py @@ -3,7 +3,7 @@ # @Author: Zhanyi Hou # @Email: 1295752786@qq.com # @File: find_gotoline.py -from qtpy.QtWidgets import QDialog, QVBoxLayout, QPushButton, QHBoxLayout +from PySide2.QtWidgets import QDialog, QVBoxLayout, QPushButton, QHBoxLayout from pmgwidgets import PMGPanel diff --git a/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py b/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py index 57675135..968a56f2 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py +++ b/packages/code_editor/codeeditor/qtpyeditor/highlighters/python.py @@ -7,9 +7,9 @@ import sys import time from typing import Dict, Tuple, List, Set -from qtpy.QtCore import QRegExp, Qt -from qtpy.QtWidgets import QApplication -from qtpy.QtGui import QSyntaxHighlighter, QTextCharFormat, QColor, QFont, QCursor, QBrush, QTextBlock +from PySide2.QtCore import QRegExp, Qt +from PySide2.QtWidgets import QApplication +from PySide2.QtGui import QSyntaxHighlighter, QTextCharFormat, QColor, QFont, QCursor, QBrush, QTextBlock color_scheme_intellij = {'keyword': '#101e96'} color_scheme_dark = {'keyword': '#b7602f'} diff --git a/packages/code_editor/codeeditor/qtpyeditor/linenumber.py b/packages/code_editor/codeeditor/qtpyeditor/linenumber.py index a41fce66..b8e95561 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/linenumber.py +++ b/packages/code_editor/codeeditor/qtpyeditor/linenumber.py @@ -10,9 +10,9 @@ import os from PySide2.QtGui import QFontDatabase -from qtpy.QtCore import Qt, QRect, QSize -from qtpy.QtWidgets import QWidget, QPlainTextEdit, QTextEdit -from qtpy.QtGui import QColor, QPainter, QTextFormat, QFont +from PySide2.QtCore import Qt, QRect, QSize +from PySide2.QtWidgets import QWidget, QPlainTextEdit, QTextEdit +from PySide2.QtGui import QColor, QPainter, QTextFormat, QFont import utils @@ -139,7 +139,7 @@ class QCodeEditor(QPlainTextEdit): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication(sys.argv) codeEditor = QCodeEditor() diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py b/packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py index 1cad7e34..cc9bb392 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py +++ b/packages/code_editor/codeeditor/qtpyeditor/ui/findinpath.py @@ -7,9 +7,9 @@ import os from typing import List, Tuple from pmgwidgets import PMDockObject from pmtoolbox import search_in_path -from qtpy.QtWidgets import QDialog, QApplication, QVBoxLayout, QListWidget, QHBoxLayout, QPushButton, QCheckBox, \ +from PySide2.QtWidgets import QDialog, QApplication, QVBoxLayout, QListWidget, QHBoxLayout, QPushButton, QCheckBox, \ QLineEdit, QListWidgetItem -from qtpy.QtCore import Signal +from PySide2.QtCore import Signal class FindInPathWidget(QDialog, PMDockObject): diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py b/packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py index e7409683..36fc991f 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py +++ b/packages/code_editor/codeeditor/qtpyeditor/ui/ui_formeditor.py @@ -6,7 +6,7 @@ # # WARNING! All changes made in this file will be lost! -from qtpy import QtCore, QtGui, QtWidgets +from PySide2 import QtCore, QtGui, QtWidgets class Ui_FormEditor(object): def setupUi(self, FormEditor): diff --git a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py b/packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py index 7e1f9875..aa79c1f6 100644 --- a/packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py +++ b/packages/code_editor/codeeditor/qtpyeditor/ui/ui_gotoline.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from qtpy import QtCore, QtGui, QtWidgets +from PySide2 import QtCore, QtGui, QtWidgets class Ui_DialogGoto(object): diff --git a/pmgui.py b/pmgui.py index a6c5bfaf..93f3ced2 100644 --- a/pmgui.py +++ b/pmgui.py @@ -8,9 +8,9 @@ from pmgwidgets import PMGToolBar, ActionWithMessage, PMDockObject, create_icon from typing import List, Callable, Tuple, ClassVar -from qtpy.QtCore import Signal, QTimer, Qt, QTranslator, QLocale, QSize, QCoreApplication -from qtpy.QtGui import QCloseEvent, QTextCursor, QResizeEvent, QFontDatabase, QMoveEvent, QFont, QIcon, QPixmap -from qtpy.QtWidgets import QApplication, QTextEdit, QMessageBox, QToolBar, QSplashScreen, QStatusBar, QTextBrowser, \ +from PySide2.QtCore import Signal, QTimer, Qt, QTranslator, QLocale, QSize, QCoreApplication +from PySide2.QtGui import QCloseEvent, QTextCursor, QResizeEvent, QFontDatabase, QMoveEvent, QFont, QIcon, QPixmap +from PySide2.QtWidgets import QApplication, QTextEdit, QMessageBox, QToolBar, QSplashScreen, QStatusBar, QTextBrowser, \ QDialog, QVBoxLayout, QLabel, QHBoxLayout, QPushButton from utils import get_main_window, get_application diff --git a/pmgwidgets/display/browser/browser.py b/pmgwidgets/display/browser/browser.py index 4c7dc654..11ba8aa4 100644 --- a/pmgwidgets/display/browser/browser.py +++ b/pmgwidgets/display/browser/browser.py @@ -4,9 +4,9 @@ https://www.cnblogs.com/taostaryu/p/9772492.html """ import sys -from qtpy.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QToolBar, QLineEdit -from qtpy.QtCore import QUrl, Signal -from qtpy.QtWebEngineWidgets import QWebEngineView +from PySide2.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QToolBar, QLineEdit +from PySide2.QtCore import QUrl, Signal +from PySide2.QtWebEngineWidgets import QWebEngineView class PMGWebBrowser(QWidget): diff --git a/pmgwidgets/display/dynamicgraph/base/basetimeseries.py b/pmgwidgets/display/dynamicgraph/base/basetimeseries.py index a0bc7207..d00a7e04 100644 --- a/pmgwidgets/display/dynamicgraph/base/basetimeseries.py +++ b/pmgwidgets/display/dynamicgraph/base/basetimeseries.py @@ -1,8 +1,8 @@ import sys import time -from qtpy.QtCore import QTimer -from qtpy.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton import numpy as np from typing import List, Dict, Tuple from pmgwidgets.display.matplotlib.qt5agg import PMMatplotlibQt5Widget diff --git a/pmgwidgets/display/matplotlib/pmagg.py b/pmgwidgets/display/matplotlib/pmagg.py index bcfa5e17..2e665d7f 100644 --- a/pmgwidgets/display/matplotlib/pmagg.py +++ b/pmgwidgets/display/matplotlib/pmagg.py @@ -1,5 +1,5 @@ import sys -from qtpy import QtWidgets +from PySide2 import QtWidgets import matplotlib.pyplot as plt import random sys.path.append(r'E:\Python\pyminer_bin\PyMiner\bin\pyminer2\extensions\packages\pmagg') @@ -31,6 +31,6 @@ if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) config_path = os.path.join(r'E:\Python\pyminer_bin\PyMiner\bin\pyminer2\extensions\packages\pmagg', 'settings.cfg') main = MainWindow(fig, config_path) - main.setWindowTitle('Simple qtpy and PMAgg example') + main.setWindowTitle('Simple PySide2 and PMAgg example') main.show() sys.exit(app.exec_()) \ No newline at end of file diff --git a/pmgwidgets/display/matplotlib/pyqtgraph/pyqtgraphwidget.py b/pmgwidgets/display/matplotlib/pyqtgraph/pyqtgraphwidget.py index 00b14042..318ff05f 100644 --- a/pmgwidgets/display/matplotlib/pyqtgraph/pyqtgraphwidget.py +++ b/pmgwidgets/display/matplotlib/pyqtgraph/pyqtgraphwidget.py @@ -2,8 +2,8 @@ import sys import random import numpy as np import pyqtgraph as pg -from qtpy.QtCore import QTimer -from qtpy.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout class PMPyQtGraphWidget(QWidget): diff --git a/pmgwidgets/display/matplotlib/qt5agg.py b/pmgwidgets/display/matplotlib/qt5agg.py index b3e7006c..c88513aa 100644 --- a/pmgwidgets/display/matplotlib/qt5agg.py +++ b/pmgwidgets/display/matplotlib/qt5agg.py @@ -1,6 +1,6 @@ from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg import matplotlib.pyplot as plt -from qtpy.QtWidgets import QVBoxLayout, QWidget +from PySide2.QtWidgets import QVBoxLayout, QWidget from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -28,8 +28,8 @@ class PMMatplotlibQt5Widget(QWidget): if __name__ == '__main__': import sys - # from qtpy.QtWidgets import QApplication - from qtpy.QtWidgets import QApplication + # from PySide2.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication from pmgwidgets.display import PMMatplotlibQt5Widget diff --git a/pmgwidgets/docs/threading_and_tasking.md b/pmgwidgets/docs/threading_and_tasking.md index 01f5ec27..d7d85dcd 100644 --- a/pmgwidgets/docs/threading_and_tasking.md +++ b/pmgwidgets/docs/threading_and_tasking.md @@ -18,7 +18,7 @@ import sys import time from pmgwidgets import PMGOneShotThreadRunner # 导入单线程任务运行器 -from qtpy.QtWidgets import QTextEdit, QApplication, QWidget, QVBoxLayout, QPushButton +from PySide2.QtWidgets import QTextEdit, QApplication, QWidget, QVBoxLayout, QPushButton def run(loop_times): @@ -83,7 +83,7 @@ is_running,返回线程是否在运行。 ```python import sys import time -from qtpy.QtWidgets import QTextEdit, QApplication +from PySide2.QtWidgets import QTextEdit, QApplication from pmgwidgets import PMGLoopThreadRunner @@ -141,7 +141,7 @@ signal_finished,意思后台线程执行完规定次数退出前发出的信 ```python import sys import time -from qtpy.QtWidgets import QTextEdit, QApplication, QPushButton, QWidget, QVBoxLayout +from PySide2.QtWidgets import QTextEdit, QApplication, QPushButton, QWidget, QVBoxLayout from pmgwidgets import PMGEndlessLoopThreadRunner diff --git a/pmgwidgets/elements/dockobject.py b/pmgwidgets/elements/dockobject.py index f4af0f1b..f5c5e5c0 100644 --- a/pmgwidgets/elements/dockobject.py +++ b/pmgwidgets/elements/dockobject.py @@ -1,6 +1,6 @@ from typing import Tuple -from qtpy.QtWidgets import QWidget +from PySide2.QtWidgets import QWidget class PMDockObject(object): diff --git a/pmgwidgets/elements/toolbar.py b/pmgwidgets/elements/toolbar.py index 45176546..6fa2ab83 100644 --- a/pmgwidgets/elements/toolbar.py +++ b/pmgwidgets/elements/toolbar.py @@ -1,8 +1,8 @@ from typing import List, Callable, Optional -from qtpy.QtCore import Qt, QSize -from qtpy.QtGui import QIcon -from qtpy.QtWidgets import QToolBar, QPushButton, QMenu, QToolButton, QAction, QWidget,QHBoxLayout +from PySide2.QtCore import Qt, QSize +from PySide2.QtGui import QIcon +from PySide2.QtWidgets import QToolBar, QPushButton, QMenu, QToolButton, QAction, QWidget, QHBoxLayout class ActionWithMessage(QAction): diff --git a/pmgwidgets/flowchart/core/flow_content.py b/pmgwidgets/flowchart/core/flow_content.py index 41ba7414..4ef6ee15 100644 --- a/pmgwidgets/flowchart/core/flow_content.py +++ b/pmgwidgets/flowchart/core/flow_content.py @@ -6,9 +6,9 @@ import json import time import types -from qtpy.QtCore import QObject -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import Signal +from PySide2.QtCore import QObject +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import Signal from typing import TYPE_CHECKING, Callable, List, Union, Tuple, Dict if TYPE_CHECKING: diff --git a/pmgwidgets/flowchart/core/flow_items.py b/pmgwidgets/flowchart/core/flow_items.py index fc3b21c7..a274c017 100644 --- a/pmgwidgets/flowchart/core/flow_items.py +++ b/pmgwidgets/flowchart/core/flow_items.py @@ -2,11 +2,10 @@ 绘制层次: """ -from qtpy.QtCore import QLineF, QPointF, Qt, QRectF, Signal -from qtpy.QtGui import QPolygonF, QPen, QPainterPath, QColor, QPainter, QBrush -from qtpy.QtWidgets import QGraphicsLineItem, QGraphicsItem, QGraphicsSceneMouseEvent, QGraphicsObject, \ +from PySide2.QtCore import QLineF, QPointF, Qt, QRectF, Signal +from PySide2.QtGui import QPolygonF, QPen, QPainterPath, QColor, QPainter, QBrush +from PySide2.QtWidgets import QGraphicsLineItem, QGraphicsItem, QGraphicsSceneMouseEvent, QGraphicsObject, \ QStyleOptionGraphicsItem, QWidget, QGraphicsSceneHoverEvent, QGraphicsTextItem, QTextEdit -from qtpy import PYQT5, PYSIDE2 from typing import TYPE_CHECKING, Tuple, List, Callable, Any @@ -322,10 +321,10 @@ class CustomLine(QGraphicsLineItem): p1 = v.p2() p2 = n.p2() p3 = n2.p2() - if PYSIDE2: - QPainter.drawPolygon([p1, p2, p3]) - else: - QPainter.drawPolygon(p1, p2, p3) + # if PYSIDE2: + QPainter.drawPolygon([p1, p2, p3]) + # else: + # QPainter.drawPolygon(p1, p2, p3) return QPolygonF([p1, p2, p3, p1]) def paint(self, q_painter: 'QPainter', style_option_graphics_item: 'QStyleOptionGraphicsItem', @@ -641,7 +640,7 @@ class CustomRect(QGraphicsItem): # self.on_edit_properties_requested() def on_value_show_requested(self): - from qtpy.QtWidgets import QDialog, QVBoxLayout + from PySide2.QtWidgets import QDialog, QVBoxLayout val_dlg = QDialog() val_dlg.setLayout(QVBoxLayout()) text_show = QTextEdit() diff --git a/pmgwidgets/flowchart/core/flow_node.py b/pmgwidgets/flowchart/core/flow_node.py index 5fae98b4..086c8877 100644 --- a/pmgwidgets/flowchart/core/flow_node.py +++ b/pmgwidgets/flowchart/core/flow_node.py @@ -2,9 +2,9 @@ import os import sys from typing import Tuple, List, Dict, Union, TYPE_CHECKING, Callable import json -from qtpy.QtWidgets import QGraphicsTextItem, QGraphicsPixmapItem, QMessageBox -from qtpy.QtCore import QObject, QPointF -from qtpy.QtGui import QPixmap +from PySide2.QtWidgets import QGraphicsTextItem, QGraphicsPixmapItem, QMessageBox +from PySide2.QtCore import QObject, QPointF +from PySide2.QtGui import QPixmap from pmgwidgets.flowchart.core.flow_items import CustomRect, CustomPort from pmgwidgets import get_parent_path, assert_in @@ -304,7 +304,7 @@ class Node(QObject): def on_edit_ports(self): from pmgwidgets import PMGPanel - from qtpy.QtWidgets import QDialog, QVBoxLayout + from PySide2.QtWidgets import QDialog, QVBoxLayout dlg = QDialog(self.base_rect.scene().flow_widget) sp = PMGPanel() p: 'CustomPort' = None @@ -365,7 +365,7 @@ class Node(QObject): """ from pmgwidgets import PMGPanel - from qtpy.QtWidgets import QDialog, QVBoxLayout + from PySide2.QtWidgets import QDialog, QVBoxLayout if isinstance(self.content, FlowContentForFunction): dlg = QDialog(self.base_rect.scene().flow_widget) diff --git a/pmgwidgets/flowchart/core/flowchart_scene.py b/pmgwidgets/flowchart/core/flowchart_scene.py index 719ccf40..6c1137d2 100644 --- a/pmgwidgets/flowchart/core/flowchart_scene.py +++ b/pmgwidgets/flowchart/core/flowchart_scene.py @@ -24,9 +24,9 @@ from pmgwidgets.flowchart.core.flow_items import CustomPort, CustomLine, CustomM from pmgwidgets.flowchart.core.flow_node import Node from pmgwidgets.flowchart.core.nodemanager import NodeManagerWidget from pmgwidgets.utilities.uilogics.undomanager import UndoManager -from qtpy.QtCore import QSize, QCoreApplication, QLineF, Qt, QPointF, QThread, Signal -from qtpy.QtGui import QPen, QColor, QKeyEvent, QWheelEvent, QCloseEvent -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ +from PySide2.QtCore import QSize, QCoreApplication, QLineF, Qt, QPointF, QThread, Signal +from PySide2.QtGui import QPen, QColor, QKeyEvent, QWheelEvent, QCloseEvent +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ QFrame, QApplication, QGraphicsScene, QGraphicsSceneMouseEvent, QMenu, QGraphicsSceneContextMenuEvent, QFileDialog, \ QMessageBox diff --git a/pmgwidgets/flowchart/core/flowchart_widget.py b/pmgwidgets/flowchart/core/flowchart_widget.py index 19c102e8..d4329b66 100644 --- a/pmgwidgets/flowchart/core/flowchart_widget.py +++ b/pmgwidgets/flowchart/core/flowchart_widget.py @@ -24,9 +24,9 @@ from pmgwidgets.flowchart.core.flow_node import Node from pmgwidgets.flowchart.core.nodemanager import NodeManagerWidget from pmgwidgets.flowchart.core.flowchart_scene import PMGraphicsScene from pmgwidgets.widgets.basic.texts.statusreport import show_error -from qtpy.QtCore import QSize, QCoreApplication, QLineF, Qt, QThread, Signal -from qtpy.QtGui import QColor, QKeyEvent, QWheelEvent, QCloseEvent -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ +from PySide2.QtCore import QSize, QCoreApplication, QLineF, Qt, QThread, Signal +from PySide2.QtGui import QColor, QKeyEvent, QWheelEvent, QCloseEvent +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ QFrame, QApplication, QFileDialog, QMessageBox COLOR_NORMAL = QColor(212, 227, 242) diff --git a/pmgwidgets/flowchart/core/nodemanager.py b/pmgwidgets/flowchart/core/nodemanager.py index 798ae151..902a9a92 100644 --- a/pmgwidgets/flowchart/core/nodemanager.py +++ b/pmgwidgets/flowchart/core/nodemanager.py @@ -12,9 +12,9 @@ from pmgwidgets import PMGPanel from pmgwidgets.flowchart.core.flow_content import FlowContentForFunction from pmgwidgets.flowchart.core.flow_items import CustomPort from pmgwidgets.flowchart.core.flow_node import Node -from qtpy.QtCore import Signal -from qtpy.QtGui import QColor -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QListWidget, QPushButton, QDialog, QToolBox, QTextEdit +from PySide2.QtCore import Signal +from PySide2.QtGui import QColor +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QListWidget, QPushButton, QDialog, QToolBox, QTextEdit COLOR_NORMAL = QColor(212, 227, 242) COLOR_HOVER = QColor(255, 200, 00) diff --git a/pmgwidgets/flowchart/core/utils.py b/pmgwidgets/flowchart/core/utils.py index eacc1704..b8a18278 100644 --- a/pmgwidgets/flowchart/core/utils.py +++ b/pmgwidgets/flowchart/core/utils.py @@ -1,4 +1,4 @@ -from qtpy.QtCore import QPointF +from PySide2.QtCore import QPointF def round_position(point: QPointF, pixels=5): diff --git a/pmgwidgets/flowchart/dataprocesswidget.py b/pmgwidgets/flowchart/dataprocesswidget.py index 17209ab5..41def247 100644 --- a/pmgwidgets/flowchart/dataprocesswidget.py +++ b/pmgwidgets/flowchart/dataprocesswidget.py @@ -22,9 +22,9 @@ from pmgwidgets.flowchart.core.flowchart_widget import PMFlowWidget from pmgwidgets.flowchart.core.flow_node import Node from pmgwidgets.flowchart.core.nodemanager import NodeManagerWidget from pmgwidgets.flowchart.core.flowchart_scene import PMGraphicsScene -from qtpy.QtCore import QSize, QCoreApplication, Qt -from qtpy.QtGui import QColor, QWheelEvent -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ +from PySide2.QtCore import QSize, QCoreApplication, Qt +from PySide2.QtGui import QColor, QWheelEvent +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ QFrame, QApplication, QFileDialog, QMessageBox COLOR_NORMAL = QColor(212, 227, 242) diff --git a/pmgwidgets/flowchart/nodes/dataframeoperation/randomrowsample.py b/pmgwidgets/flowchart/nodes/dataframeoperation/randomrowsample.py index 4542d879..dc4426f2 100644 --- a/pmgwidgets/flowchart/nodes/dataframeoperation/randomrowsample.py +++ b/pmgwidgets/flowchart/nodes/dataframeoperation/randomrowsample.py @@ -54,7 +54,7 @@ class RandomRowSample(PMGFlowContent): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication(sys.argv) diff --git a/pmgwidgets/flowchart/nodes/io/iterator.py b/pmgwidgets/flowchart/nodes/io/iterator.py index 09377e81..066acf13 100644 --- a/pmgwidgets/flowchart/nodes/io/iterator.py +++ b/pmgwidgets/flowchart/nodes/io/iterator.py @@ -54,7 +54,7 @@ class Iterator(PMGFlowContent): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication(sys.argv) diff --git a/pmgwidgets/flowchart/nodes/io/listdir.py b/pmgwidgets/flowchart/nodes/io/listdir.py index bf4ab8c5..31248e47 100644 --- a/pmgwidgets/flowchart/nodes/io/listdir.py +++ b/pmgwidgets/flowchart/nodes/io/listdir.py @@ -64,7 +64,7 @@ class ListDirs(PMGFlowContent): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication(sys.argv) diff --git a/pmgwidgets/flowchart/nodes/io/pdimport.py b/pmgwidgets/flowchart/nodes/io/pdimport.py index cdb3ef07..bfe5d624 100644 --- a/pmgwidgets/flowchart/nodes/io/pdimport.py +++ b/pmgwidgets/flowchart/nodes/io/pdimport.py @@ -158,7 +158,7 @@ class PandasImport(BaseTableImport): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication(sys.argv) diff --git a/pmgwidgets/flowchart/nodes/random.py b/pmgwidgets/flowchart/nodes/random.py index 5492f492..85a57b18 100644 --- a/pmgwidgets/flowchart/nodes/random.py +++ b/pmgwidgets/flowchart/nodes/random.py @@ -1,7 +1,7 @@ import sys from typing import List, Union, Tuple -from qtpy.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit +from PySide2.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit from pmgwidgets import PMGFlowContent, PMGPanelDialog import numpy as np diff --git a/pmgwidgets/flowchart/nodes/simplecalc.py b/pmgwidgets/flowchart/nodes/simplecalc.py index 136add93..229ec40d 100644 --- a/pmgwidgets/flowchart/nodes/simplecalc.py +++ b/pmgwidgets/flowchart/nodes/simplecalc.py @@ -1,7 +1,7 @@ import sys from typing import List -from qtpy.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit +from PySide2.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit from pmgwidgets import PMFlowWidget, PMGFlowContent diff --git a/pmgwidgets/flowchart/simulationwidget.py b/pmgwidgets/flowchart/simulationwidget.py index 0091df37..ef691916 100644 --- a/pmgwidgets/flowchart/simulationwidget.py +++ b/pmgwidgets/flowchart/simulationwidget.py @@ -23,9 +23,9 @@ from pmgwidgets.flowchart.core.flow_node import Node from pmgwidgets.flowchart.core.nodemanager import NodeManagerWidget from pmgwidgets.flowchart.core.flowchart_scene import PMGraphicsScene from pmgwidgets.flowchart.core.flowchart_widget import PMGraphicsView -from qtpy.QtCore import QSize, QCoreApplication, QLineF, Qt, QThread, Signal -from qtpy.QtGui import QColor, QKeyEvent, QWheelEvent, QCloseEvent -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ +from PySide2.QtCore import QSize, QCoreApplication, QLineF, Qt, QThread, Signal +from PySide2.QtGui import QColor, QKeyEvent, QWheelEvent, QCloseEvent +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QToolButton, QSpacerItem, QSizePolicy, QGraphicsView, \ QFrame, QApplication, QFileDialog, QMessageBox from pmgwidgets.flowchart.core import PMFlowWidget diff --git a/pmgwidgets/flowchart/tests/continously_data_process.py b/pmgwidgets/flowchart/tests/continously_data_process.py index a5d55564..d7410133 100644 --- a/pmgwidgets/flowchart/tests/continously_data_process.py +++ b/pmgwidgets/flowchart/tests/continously_data_process.py @@ -4,8 +4,8 @@ DO] add a table to store some informations about calculation. import sys import time -from qtpy.QtCore import QTimer -from qtpy.QtWidgets import QApplication +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QApplication from pmgwidgets.flowchart.core.flowchart_widget import PMFlowWidget diff --git a/pmgwidgets/flowchart/tests/database_import.py b/pmgwidgets/flowchart/tests/database_import.py index 0f22358d..78d5405a 100644 --- a/pmgwidgets/flowchart/tests/database_import.py +++ b/pmgwidgets/flowchart/tests/database_import.py @@ -1,8 +1,8 @@ import sys import time -from qtpy.QtCore import QTimer -from qtpy.QtWidgets import QApplication +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QApplication from pmgwidgets.flowchart.core.flowchart_widget import PMFlowWidget import cgitb diff --git a/pmgwidgets/flowchart/tests/fault_tree.py b/pmgwidgets/flowchart/tests/fault_tree.py index 9bb1d059..84e21da7 100644 --- a/pmgwidgets/flowchart/tests/fault_tree.py +++ b/pmgwidgets/flowchart/tests/fault_tree.py @@ -1,8 +1,8 @@ import sys import time -from qtpy.QtCore import QTimer -from qtpy.QtWidgets import QApplication +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QApplication from pmgwidgets.flowchart.core.flowchart_widget import PMFlowWidget diff --git a/pmgwidgets/flowchart/tests/node_test.py b/pmgwidgets/flowchart/tests/node_test.py index 6c072c9f..da219b9c 100644 --- a/pmgwidgets/flowchart/tests/node_test.py +++ b/pmgwidgets/flowchart/tests/node_test.py @@ -1,7 +1,7 @@ import sys from typing import List, Union -from qtpy.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit +from PySide2.QtWidgets import QApplication, QDialog, QVBoxLayout, QLineEdit # from pmgwidgets.flowchart.nodes.random import Random # from pmgwidgets.flowchart.nodes.plots import HistPlot from pmgwidgets.flowchart.nodes.dfoperation import DataReplace diff --git a/pmgwidgets/utilities/network/qtclient.py b/pmgwidgets/utilities/network/qtclient.py index f5bf547a..35047ed3 100644 --- a/pmgwidgets/utilities/network/qtclient.py +++ b/pmgwidgets/utilities/network/qtclient.py @@ -14,8 +14,8 @@ import socket logger = logging.getLogger(__name__) -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, QThread, Signal, QTimer +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, QThread, Signal, QTimer from .util import timeit, receive from .baseclient import BaseClient diff --git a/pmgwidgets/utilities/network/server.py b/pmgwidgets/utilities/network/server.py index e10adb3e..d6ebf377 100644 --- a/pmgwidgets/utilities/network/server.py +++ b/pmgwidgets/utilities/network/server.py @@ -11,8 +11,8 @@ import sys import logging from typing import List, Tuple, Dict, Union -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, QThread, QTimer +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, QThread, QTimer from .util import receive, strip_byte_end diff --git a/pmgwidgets/utilities/platform/filesyswatchdog.py b/pmgwidgets/utilities/platform/filesyswatchdog.py index ee90ed36..65d0e687 100644 --- a/pmgwidgets/utilities/platform/filesyswatchdog.py +++ b/pmgwidgets/utilities/platform/filesyswatchdog.py @@ -3,12 +3,12 @@ 文件系统看门狗-(Watchdog for filesystem) 来源- (source) https://stackoverflow.com/questions/35874217/watchdog-pythons-library-how-to-send-signal-when-a-file-is-modified -源代码为PyQt4,本人整理、移植到qtpy。(Originally code was in PyQt4 and I transplanted to qtpy.) +源代码为PyQt4,本人整理、移植到qtpy。(Originally code was in PyQt4 and I transplanted to PySide2.) """ import os -from qtpy.QtCore import Signal, QThread -from qtpy.QtWidgets import QMainWindow, QApplication, QLabel +from PySide2.QtCore import Signal, QThread +from PySide2.QtWidgets import QMainWindow, QApplication, QLabel from watchdog.events import FileSystemEventHandler, FileModifiedEvent, FileMovedEvent, \ FileCreatedEvent, FileDeletedEvent from watchdog.observers import Observer diff --git a/pmgwidgets/utilities/platform/translation.py b/pmgwidgets/utilities/platform/translation.py index 2e897572..22690753 100644 --- a/pmgwidgets/utilities/platform/translation.py +++ b/pmgwidgets/utilities/platform/translation.py @@ -1,6 +1,6 @@ def add_translation_file(file_path: str): - from qtpy.QtWidgets import QApplication - from qtpy.QtCore import QTranslator + from PySide2.QtWidgets import QApplication + from PySide2.QtCore import QTranslator app = QApplication.instance() if hasattr(app, 'trans'): try: diff --git a/pmgwidgets/utilities/source/iconutils.py b/pmgwidgets/utilities/source/iconutils.py index 219debb3..2d4aca90 100644 --- a/pmgwidgets/utilities/source/iconutils.py +++ b/pmgwidgets/utilities/source/iconutils.py @@ -1,4 +1,4 @@ -from qtpy.QtGui import QIcon, QPixmap +from PySide2.QtGui import QIcon, QPixmap def create_icon(icon_path: str = ":/pyqt/source/images/New.png"): diff --git a/pmgwidgets/utilities/source/translation.py b/pmgwidgets/utilities/source/translation.py index 00db595b..3b93cd20 100644 --- a/pmgwidgets/utilities/source/translation.py +++ b/pmgwidgets/utilities/source/translation.py @@ -1,6 +1,6 @@ import os -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QLocale, QTranslator +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QLocale, QTranslator def create_translation(target_files: str): import os diff --git a/pmgwidgets/utilities/uilogics/drags.py b/pmgwidgets/utilities/uilogics/drags.py index 9d8fec11..26344070 100644 --- a/pmgwidgets/utilities/uilogics/drags.py +++ b/pmgwidgets/utilities/uilogics/drags.py @@ -2,7 +2,7 @@ import sys from PySide2.QtCore import QUrl from PySide2.QtGui import QDropEvent -from qtpy.QtWidgets import QApplication, QTextBrowser +from PySide2.QtWidgets import QApplication, QTextBrowser class Demo(QTextBrowser): # 1 diff --git a/pmgwidgets/utilities/uilogics/tasks/loop_background.py b/pmgwidgets/utilities/uilogics/tasks/loop_background.py index 91bc652c..eb67576e 100644 --- a/pmgwidgets/utilities/uilogics/tasks/loop_background.py +++ b/pmgwidgets/utilities/uilogics/tasks/loop_background.py @@ -6,9 +6,9 @@ import sys import time from typing import Callable, Tuple, Iterable # from collections import Iterable -from qtpy.QtGui import QCloseEvent -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, Signal +from PySide2.QtGui import QCloseEvent +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, Signal logger = logging.getLogger(__name__) from pmgwidgets.utilities.uilogics.tasks.minimal_thread import PMGQThreadManager @@ -137,7 +137,7 @@ class PMGEndlessLoopThreadRunner(QObject): if __name__ == '__main__': - from qtpy.QtWidgets import QTextEdit + from PySide2.QtWidgets import QTextEdit def run(i, j): diff --git a/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py b/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py index 0ec0453a..6a3b18e0 100644 --- a/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py +++ b/pmgwidgets/utilities/uilogics/tasks/minimal_thread.py @@ -5,9 +5,9 @@ import logging import sys import time -from qtpy.QtGui import QCloseEvent, QKeyEvent -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, QThread, Signal, QMutex, QWaitCondition +from PySide2.QtGui import QCloseEvent, QKeyEvent +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, QThread, Signal, QMutex, QWaitCondition logger = logging.getLogger(__name__) @@ -37,7 +37,7 @@ class PMGQThreadManager(QObject): if __name__ == '__main__': - from qtpy.QtWidgets import QTextEdit + from PySide2.QtWidgets import QTextEdit i = 0 j = 0 diff --git a/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py b/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py index 7e573d75..7b04de17 100644 --- a/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py +++ b/pmgwidgets/utilities/uilogics/tasks/one_shot_background.py @@ -6,9 +6,9 @@ import sys import time from typing import Callable, Tuple -from qtpy.QtGui import QCloseEvent -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, Signal +from PySide2.QtGui import QCloseEvent +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, Signal logger = logging.getLogger(__name__) from pmgwidgets.utilities.uilogics.tasks.minimal_thread import PMGQThreadManager @@ -74,7 +74,7 @@ class PMGOneShotThreadRunner(QObject): return self.worker.thread().isRunning() if __name__ == '__main__': - from qtpy.QtWidgets import QTextEdit + from PySide2.QtWidgets import QTextEdit def run(loop_times): diff --git a/pmgwidgets/utilities/uilogics/tasks/threads.py b/pmgwidgets/utilities/uilogics/tasks/threads.py index eca8ff0e..d9fedfac 100644 --- a/pmgwidgets/utilities/uilogics/tasks/threads.py +++ b/pmgwidgets/utilities/uilogics/tasks/threads.py @@ -8,8 +8,8 @@ from typing import Callable logger = logging.getLogger(__name__) -from qtpy.QtWidgets import QApplication -from qtpy.QtCore import QObject, QThread, Signal +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QObject, QThread, Signal class PMGThreadWorker(QObject): @@ -83,7 +83,7 @@ class PMQThreadManager(QObject): if __name__ == '__main__': - from qtpy.QtWidgets import QTextEdit + from PySide2.QtWidgets import QTextEdit def loop(): diff --git a/pmgwidgets/utilities/uilogics/windowutils.py b/pmgwidgets/utilities/uilogics/windowutils.py index 1f0f5fac..91cb0ed6 100644 --- a/pmgwidgets/utilities/uilogics/windowutils.py +++ b/pmgwidgets/utilities/uilogics/windowutils.py @@ -1,5 +1,5 @@ -from qtpy.QtCore import Qt -from qtpy.QtWidgets import QWidget, QDesktopWidget +from PySide2.QtCore import Qt +from PySide2.QtWidgets import QWidget, QDesktopWidget def in_unit_test(): diff --git a/pmgwidgets/widgets/basic/browsers/browser.py b/pmgwidgets/widgets/basic/browsers/browser.py index ad38215d..04ac8dba 100644 --- a/pmgwidgets/widgets/basic/browsers/browser.py +++ b/pmgwidgets/widgets/basic/browsers/browser.py @@ -4,9 +4,9 @@ https://www.cnblogs.com/taostaryu/p/9772492.html """ import sys -from qtpy.QtWidgets import QApplication, QWidget, QVBoxLayout, QToolBar, QLineEdit -from qtpy.QtCore import QUrl, Signal -from qtpy.QtWebEngineWidgets import QWebEngineView +from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QToolBar, QLineEdit +from PySide2.QtCore import QUrl, Signal +from PySide2.QtWebEngineWidgets import QWebEngineView class PMGWebBrowser(QWidget): diff --git a/pmgwidgets/widgets/basic/buttons/button/toolbutton.py b/pmgwidgets/widgets/basic/buttons/button/toolbutton.py index 3abf9126..5d20e511 100644 --- a/pmgwidgets/widgets/basic/buttons/button/toolbutton.py +++ b/pmgwidgets/widgets/basic/buttons/button/toolbutton.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding:utf-8 -*- -from qtpy.QtCore import QEvent, QTimer -from qtpy.QtGui import QColor -from qtpy.QtWidgets import QToolButton, QGraphicsDropShadowEffect, QMenu, QWidget, QHBoxLayout +from PySide2.QtCore import QEvent, QTimer +from PySide2.QtGui import QColor +from PySide2.QtWidgets import QToolButton, QGraphicsDropShadowEffect, QMenu, QWidget, QHBoxLayout class PMMenu(QMenu): @@ -54,7 +54,7 @@ class PMGToolButton(QToolButton): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication import sys app = QApplication(sys.argv) diff --git a/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py b/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py index fb4d6eae..9684fc72 100644 --- a/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py +++ b/pmgwidgets/widgets/basic/buttons/buttonpane/pushbuttonpane.py @@ -5,9 +5,9 @@ pmpushbuttons是一个按钮组,专门负责向工具栏中插入按钮。 """ from typing import List, Union -from qtpy.QtCore import Qt -from qtpy.QtGui import QIcon -from qtpy.QtWidgets import QWidget, QVBoxLayout, QPushButton, QMenu, QLabel, QToolButton +from PySide2.QtCore import Qt +from PySide2.QtGui import QIcon +from PySide2.QtWidgets import QWidget, QVBoxLayout, QPushButton, QMenu, QLabel, QToolButton from pmgwidgets.utilities import create_icon diff --git a/pmgwidgets/widgets/basic/containers/PMTab.py b/pmgwidgets/widgets/basic/containers/PMTab.py index 867ba29c..51221896 100644 --- a/pmgwidgets/widgets/basic/containers/PMTab.py +++ b/pmgwidgets/widgets/basic/containers/PMTab.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QTabWidget, QWidget +from PySide2.QtWidgets import QTabWidget, QWidget class PMTabWidget(QTabWidget): diff --git a/pmgwidgets/widgets/basic/containers/flowarea.py b/pmgwidgets/widgets/basic/containers/flowarea.py index f7c68c04..29cc0087 100644 --- a/pmgwidgets/widgets/basic/containers/flowarea.py +++ b/pmgwidgets/widgets/basic/containers/flowarea.py @@ -1,12 +1,12 @@ """ 集成了流式布局、按钮排布的窗口。 """ -from qtpy.QtWidgets import QScrollArea, QWidget, QToolButton, QVBoxLayout, QSpacerItem, QSizePolicy -from qtpy.QtCore import Qt, QSize +from PySide2.QtWidgets import QScrollArea, QWidget, QToolButton, QVBoxLayout, QSpacerItem, QSizePolicy +from PySide2.QtCore import Qt, QSize from typing import TYPE_CHECKING if TYPE_CHECKING: - from qtpy.QtGui import QResizeEvent + from PySide2.QtGui import QResizeEvent from pmgwidgets import PMFlowLayout @@ -78,7 +78,7 @@ class PMFlowArea(QScrollArea): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication, QPushButton + from PySide2.QtWidgets import QApplication, QPushButton import sys app = QApplication(sys.argv) diff --git a/pmgwidgets/widgets/basic/containers/flowlayout.py b/pmgwidgets/widgets/basic/containers/flowlayout.py index 3cf93baa..dc1c2d7a 100644 --- a/pmgwidgets/widgets/basic/containers/flowlayout.py +++ b/pmgwidgets/widgets/basic/containers/flowlayout.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QGridLayout, QWidget, QSizePolicy +from PySide2.QtWidgets import QGridLayout, QWidget, QSizePolicy class PMFlowLayoutWithGrid(QGridLayout): diff --git a/pmgwidgets/widgets/basic/containers/pmdockwidget.py b/pmgwidgets/widgets/basic/containers/pmdockwidget.py index 0cc411da..b09df36a 100644 --- a/pmgwidgets/widgets/basic/containers/pmdockwidget.py +++ b/pmgwidgets/widgets/basic/containers/pmdockwidget.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QDockWidget, QMainWindow +from PySide2.QtWidgets import QDockWidget, QMainWindow class PMGDockWidget(QDockWidget): diff --git a/pmgwidgets/widgets/basic/containers/pmscrollarea.py b/pmgwidgets/widgets/basic/containers/pmscrollarea.py index 91c65665..9b787ce6 100644 --- a/pmgwidgets/widgets/basic/containers/pmscrollarea.py +++ b/pmgwidgets/widgets/basic/containers/pmscrollarea.py @@ -1,5 +1,5 @@ -from qtpy.QtWidgets import QScrollArea -from qtpy.QtCore import Qt +from PySide2.QtWidgets import QScrollArea +from PySide2.QtCore import Qt class PMScrollArea(QScrollArea): diff --git a/pmgwidgets/widgets/basic/containers/pmtoolbox.py b/pmgwidgets/widgets/basic/containers/pmtoolbox.py index 4e2fdc0c..347a28b0 100644 --- a/pmgwidgets/widgets/basic/containers/pmtoolbox.py +++ b/pmgwidgets/widgets/basic/containers/pmtoolbox.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QToolBox, QWidget +from PySide2.QtWidgets import QToolBox, QWidget from typing import Dict, Callable diff --git a/pmgwidgets/widgets/basic/dialogs/textdialog.py b/pmgwidgets/widgets/basic/dialogs/textdialog.py index a9390c1c..3af4c2f4 100644 --- a/pmgwidgets/widgets/basic/dialogs/textdialog.py +++ b/pmgwidgets/widgets/basic/dialogs/textdialog.py @@ -4,7 +4,7 @@ # @Email: 1295752786@qq.com # @File: textdialog.py from PySide2.QtCore import QSize -from qtpy.QtWidgets import QApplication, QDialog, QVBoxLayout, QTextBrowser +from PySide2.QtWidgets import QApplication, QDialog, QVBoxLayout, QTextBrowser class TextShowDialog(QDialog): diff --git a/pmgwidgets/widgets/basic/images/imageview.py b/pmgwidgets/widgets/basic/images/imageview.py index 16dfbf1c..796bc0ba 100644 --- a/pmgwidgets/widgets/basic/images/imageview.py +++ b/pmgwidgets/widgets/basic/images/imageview.py @@ -15,7 +15,7 @@ displaying and analyzing 2D and 3D data. ImageView provides: from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph as pg -from qtpy.QtWidgets import QWidget, QVBoxLayout +from PySide2.QtWidgets import QWidget, QVBoxLayout class PMGImageViewer(QWidget): diff --git a/pmgwidgets/widgets/basic/images/imageviewitem.py b/pmgwidgets/widgets/basic/images/imageviewitem.py index b19f75bf..72dda37a 100644 --- a/pmgwidgets/widgets/basic/images/imageviewitem.py +++ b/pmgwidgets/widgets/basic/images/imageviewitem.py @@ -6,9 +6,9 @@ Demonstrates very basic use of ImageItem to display image data inside a ViewBox. ## Add path to library (just for examples; you do not need this) # from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph as pg -from qtpy.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea -from qtpy.QtGui import QImage, QPixmap -from qtpy.QtCore import Qt +from PySide2.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea +from PySide2.QtGui import QImage, QPixmap +from PySide2.QtCore import Qt import time from typing import TYPE_CHECKING from PIL import Image diff --git a/pmgwidgets/widgets/basic/labels/scrolllabel.py b/pmgwidgets/widgets/basic/labels/scrolllabel.py index 83529bfb..270f194f 100644 --- a/pmgwidgets/widgets/basic/labels/scrolllabel.py +++ b/pmgwidgets/widgets/basic/labels/scrolllabel.py @@ -1,7 +1,7 @@ -from qtpy.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea +from PySide2.QtWidgets import QWidget, QVBoxLayout, QLabel, QScrollArea -from qtpy.QtCore import Qt +from PySide2.QtCore import Qt class PMScrollableLabel(QWidget): @@ -24,7 +24,7 @@ class PMScrollableLabel(QWidget): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication import sys app = QApplication(sys.argv) w = PMScrollableLabel() diff --git a/pmgwidgets/widgets/basic/lists/combobasic.py b/pmgwidgets/widgets/basic/lists/combobasic.py index 4926a256..a918a7f6 100644 --- a/pmgwidgets/widgets/basic/lists/combobasic.py +++ b/pmgwidgets/widgets/basic/lists/combobasic.py @@ -1,7 +1,7 @@ import sys -from qtpy.QtCore import * -from qtpy.QtWidgets import * -from qtpy.QtCore import * +from PySide2.QtCore import * +from PySide2.QtWidgets import * +from PySide2.QtCore import * class ComboxDemo(QWidget): diff --git a/pmgwidgets/widgets/basic/others/console.py b/pmgwidgets/widgets/basic/others/console.py index 3e5bbbc6..34083e55 100644 --- a/pmgwidgets/widgets/basic/others/console.py +++ b/pmgwidgets/widgets/basic/others/console.py @@ -18,9 +18,9 @@ from qtconsole.manager import QtKernelManager from qtconsole.rich_jupyter_widget import RichJupyterWidget from qtconsole.styles import default_light_syntax_style, default_light_style_sheet -from qtpy.QtCore import QObject, Signal, QThread, QWaitCondition, QMutex, QPoint, QCoreApplication, QTranslator, QLocale -from qtpy.QtGui import QTextCursor -from qtpy.QtWidgets import QMessageBox, QMenu, QApplication +from PySide2.QtCore import QObject, Signal, QThread, QWaitCondition, QMutex, QPoint, QCoreApplication, QTranslator, QLocale +from PySide2.QtGui import QTextCursor +from PySide2.QtWidgets import QMessageBox, QMenu, QApplication default_dark_style_template = styles.default_template + """\ .in-prompt { color: #ff00ff; } diff --git a/pmgwidgets/widgets/basic/others/gauge.py b/pmgwidgets/widgets/basic/others/gauge.py index ae4e023b..95543732 100644 --- a/pmgwidgets/widgets/basic/others/gauge.py +++ b/pmgwidgets/widgets/basic/others/gauge.py @@ -3,10 +3,10 @@ import sys import math from typing import Tuple, Union, List -from qtpy.QtCore import QTimer, Qt, QRectF, QPoint -from qtpy.QtGui import QPainter, QLinearGradient, QFontMetricsF, QPen, QFontMetrics, QRadialGradient, QConicalGradient, \ +from PySide2.QtCore import QTimer, Qt, QRectF, QPoint +from PySide2.QtGui import QPainter, QLinearGradient, QFontMetricsF, QPen, QFontMetrics, QRadialGradient, QConicalGradient, \ QColor, QPolygon -from qtpy.QtWidgets import QWidget, QLCDNumber, QApplication +from PySide2.QtWidgets import QWidget, QLCDNumber, QApplication class PMGGauge(QWidget): diff --git a/pmgwidgets/widgets/basic/others/instantbootconsole.py b/pmgwidgets/widgets/basic/others/instantbootconsole.py index 24cab228..87fae315 100644 --- a/pmgwidgets/widgets/basic/others/instantbootconsole.py +++ b/pmgwidgets/widgets/basic/others/instantbootconsole.py @@ -9,9 +9,9 @@ import sys import logging import socket -from qtpy.QtCore import QThread, QObject, Signal, Qt -from qtpy.QtGui import QCloseEvent, QKeyEvent, QIcon -from qtpy.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QCheckBox, QTextEdit +from PySide2.QtCore import QThread, QObject, Signal, Qt +from PySide2.QtGui import QCloseEvent, QKeyEvent, QIcon +from PySide2.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QCheckBox, QTextEdit logger = logging.getLogger(__name__) @@ -276,7 +276,7 @@ if __name__ == '__main__': import sys cgitb.enable(format='text') - from qtpy.QtWidgets import QApplication, QTextEdit + from PySide2.QtWidgets import QApplication, QTextEdit app = QApplication(sys.argv) diff --git a/pmgwidgets/widgets/basic/others/processconsole.py b/pmgwidgets/widgets/basic/others/processconsole.py index 47891d3a..223b7ffd 100644 --- a/pmgwidgets/widgets/basic/others/processconsole.py +++ b/pmgwidgets/widgets/basic/others/processconsole.py @@ -9,9 +9,9 @@ import time import sys import logging -from qtpy.QtCore import QThread, QObject, Signal, Qt, QUrl -from qtpy.QtGui import QCloseEvent, QKeyEvent, QIcon, QDesktopServices, QColor -from qtpy.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QCheckBox, QTextEdit, QApplication, \ +from PySide2.QtCore import QThread, QObject, Signal, Qt, QUrl +from PySide2.QtGui import QCloseEvent, QKeyEvent, QIcon, QDesktopServices, QColor +from PySide2.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QCheckBox, QTextEdit, QApplication, \ QMessageBox logger = logging.getLogger(__name__) diff --git a/pmgwidgets/widgets/basic/plots/bars/histogram.py b/pmgwidgets/widgets/basic/plots/bars/histogram.py index 43064451..29a64716 100644 --- a/pmgwidgets/widgets/basic/plots/bars/histogram.py +++ b/pmgwidgets/widgets/basic/plots/bars/histogram.py @@ -5,7 +5,7 @@ In this example we draw two different kinds of histogram. import numpy as np import pyqtgraph as pg import sys -from qtpy.QtWidgets import QApplication +from PySide2.QtWidgets import QApplication from pmgwidgets.widgets.basic.plots import PMGPyQtGraphWidget from pmgwidgets import color_str2tup diff --git a/pmgwidgets/widgets/basic/plots/lines/timeseries.py b/pmgwidgets/widgets/basic/plots/lines/timeseries.py index 9199a4eb..8c93830e 100644 --- a/pmgwidgets/widgets/basic/plots/lines/timeseries.py +++ b/pmgwidgets/widgets/basic/plots/lines/timeseries.py @@ -1,11 +1,11 @@ import time from random import randint -from qtpy.QtGui import QBrush, QColor -from qtpy.QtWidgets import QHBoxLayout, QLabel, QSpacerItem, QSizePolicy +from PySide2.QtGui import QBrush, QColor +from PySide2.QtWidgets import QHBoxLayout, QLabel, QSpacerItem, QSizePolicy from typing import List, Union, Tuple import pyqtgraph as pg -from qtpy.QtWidgets import QVBoxLayout, QWidget, QSpinBox +from PySide2.QtWidgets import QVBoxLayout, QWidget, QSpinBox from pmgwidgets.widgets.basic.plots.pyqtgraph.base.pgplot import PMGPyQtGraphWidget from pmgwidgets import color_str2tup, TYPE_RANGE from pmgwidgets import iter_isinstance @@ -166,8 +166,8 @@ class PMGTimeSeriesPlot(QWidget): if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication - from qtpy.QtCore import QTimer + from PySide2.QtWidgets import QApplication + from PySide2.QtCore import QTimer app = QApplication(sys.argv) pmqt5mplwgt = PMGTimeSeriesPlot() diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py b/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py index b9b71511..3fdb9194 100644 --- a/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py +++ b/pmgwidgets/widgets/basic/plots/matplotlib/base/pmaggplot.py @@ -1,5 +1,5 @@ import sys -from qtpy import QtWidgets +from PySide2 import QtWidgets import matplotlib.pyplot as plt import random import os @@ -41,6 +41,6 @@ if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) config_path = os.path.join(r'/pyminer2/extensions/packages/pmagg', 'settings.cfg') main = MainWindow(fig, config_path) - main.setWindowTitle('Simple qtpy and PMAgg example') + main.setWindowTitle('Simple PySide2 and PMAgg example') main.show() sys.exit(app.exec_()) diff --git a/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py b/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py index b3e7006c..c88513aa 100644 --- a/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py +++ b/pmgwidgets/widgets/basic/plots/matplotlib/base/qt5aggplot.py @@ -1,6 +1,6 @@ from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg import matplotlib.pyplot as plt -from qtpy.QtWidgets import QVBoxLayout, QWidget +from PySide2.QtWidgets import QVBoxLayout, QWidget from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -28,8 +28,8 @@ class PMMatplotlibQt5Widget(QWidget): if __name__ == '__main__': import sys - # from qtpy.QtWidgets import QApplication - from qtpy.QtWidgets import QApplication + # from PySide2.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication from pmgwidgets.display import PMMatplotlibQt5Widget diff --git a/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py b/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py index 4d358d46..db0a8704 100644 --- a/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py +++ b/pmgwidgets/widgets/basic/plots/pyqtgraph/base/pgplot.py @@ -22,7 +22,7 @@ import sys from typing import Union import pyqtgraph as pg -from qtpy.QtWidgets import QApplication, QWidget, QVBoxLayout +from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout from pmgwidgets.utilities.source.graphicsitemutils import PMGPlotCustomizer symbols_dic = {'o': 'o', 's': 's', 't': 't', 't1': 't1', 't2': 't2', 't3': 't3', diff --git a/pmgwidgets/widgets/basic/plots/scatters/scatters.py b/pmgwidgets/widgets/basic/plots/scatters/scatters.py index c7fd3cc3..82074ea8 100644 --- a/pmgwidgets/widgets/basic/plots/scatters/scatters.py +++ b/pmgwidgets/widgets/basic/plots/scatters/scatters.py @@ -1,6 +1,6 @@ import pyqtgraph as pg import numpy as np -from qtpy.QtWidgets import QApplication +from PySide2.QtWidgets import QApplication from pmgwidgets.widgets.basic.plots.pyqtgraph import PMGPyQtGraphWidget from pmgwidgets import color_str2tup import sys diff --git a/pmgwidgets/widgets/basic/quick/demo1.py b/pmgwidgets/widgets/basic/quick/demo1.py index 21ea75b0..99cba18f 100644 --- a/pmgwidgets/widgets/basic/quick/demo1.py +++ b/pmgwidgets/widgets/basic/quick/demo1.py @@ -1,8 +1,8 @@ -from qtpy.QtCore import QUrl, QObject, Slot +from PySide2.QtCore import QUrl, QObject, Slot -from qtpy.QtGui import QGuiApplication +from PySide2.QtGui import QGuiApplication -from qtpy.QtQuick import QQuickView +from PySide2.QtQuick import QQuickView class MyClass(QObject): diff --git a/pmgwidgets/widgets/basic/tables/tableviews.py b/pmgwidgets/widgets/basic/tables/tableviews.py index 8f85e420..3664d91a 100644 --- a/pmgwidgets/widgets/basic/tables/tableviews.py +++ b/pmgwidgets/widgets/basic/tables/tableviews.py @@ -15,11 +15,11 @@ import typing from PySide2.QtGui import QColor from PySide2.QtWidgets import QSpacerItem -from qtpy.QtWidgets import QTableView, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton, \ +from PySide2.QtWidgets import QTableView, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton, \ QMessageBox, QInputDialog, QMenu, QDialog, QDialogButtonBox, QShortcut, QSizePolicy -from qtpy.QtCore import QAbstractTableModel, QModelIndex, Signal, QLocale, QCoreApplication -from qtpy.QtCore import Qt, QPoint -from qtpy.QtGui import QContextMenuEvent, QKeyEvent, QKeySequence +from PySide2.QtCore import QAbstractTableModel, QModelIndex, Signal, QLocale, QCoreApplication +from PySide2.QtCore import Qt, QPoint +from PySide2.QtGui import QContextMenuEvent, QKeyEvent, QKeySequence from pmgwidgets.utilities.source.translation import create_translator from pmgwidgets.widgets.basic.dialogs.textdialog import TextShowDialog diff --git a/pmgwidgets/widgets/basic/tables/tablewidgets.py b/pmgwidgets/widgets/basic/tables/tablewidgets.py index f2a66c37..72a42a20 100644 --- a/pmgwidgets/widgets/basic/tables/tablewidgets.py +++ b/pmgwidgets/widgets/basic/tables/tablewidgets.py @@ -5,9 +5,9 @@ import sys -from qtpy.QtCore import Signal -from qtpy.QtGui import QCloseEvent -from qtpy.QtWidgets import QApplication, QTabWidget, QTableWidget, QTableWidgetItem, \ +from PySide2.QtCore import Signal +from PySide2.QtGui import QCloseEvent +from PySide2.QtWidgets import QApplication, QTabWidget, QTableWidget, QTableWidgetItem, \ QAbstractItemView from typing import Sized, Iterable diff --git a/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py b/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py index 5042590b..17eb56ee 100644 --- a/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py +++ b/pmgwidgets/widgets/basic/texts/statusreport/errroreport.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QWidget, QDialog, QVBoxLayout, QTextBrowser, QLabel, QPushButton +from PySide2.QtWidgets import QWidget, QDialog, QVBoxLayout, QTextBrowser, QLabel, QPushButton class ReportWidget(QDialog): diff --git a/pmgwidgets/widgets/basic/texts/webeditors/editor.py b/pmgwidgets/widgets/basic/texts/webeditors/editor.py index ecb68d8a..cb05f4ef 100644 --- a/pmgwidgets/widgets/basic/texts/webeditors/editor.py +++ b/pmgwidgets/widgets/basic/texts/webeditors/editor.py @@ -7,12 +7,12 @@ from time import time import json import qdarkstyle import qdarkstyle.style_rc # 导入pdarkstyle资源文件 -from qtpy import QtCore -from qtpy.QtCore import Qt, QPoint, QUrl, Signal, QTimer, QEventLoop -from qtpy.QtWebChannel import QWebChannel -from qtpy.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings -from qtpy.QtWidgets import * -from qtpy.QtCore import Slot +from PySide2 import QtCore +from PySide2.QtCore import Qt, QPoint, QUrl, Signal, QTimer, QEventLoop +from PySide2.QtWebChannel import QWebChannel +from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings +from PySide2.QtWidgets import * +from PySide2.QtCore import Slot strategy_path = os.path.join(os.getcwd(), 'strategy') # 用于存放编辑文件的文件夹 editor_path = os.path.join(os.path.dirname(__file__), 'quant', 'python_editor', 'editor.htm') @@ -100,7 +100,7 @@ class WebEngineView(QWebEngineView): # @Slot(QUrl) def load(self, url): ''' - eg: load("https://qtpy.com") + eg: load("https://PySide2.com") :param url: 网址 ''' return super(WebEngineView, self).load(QUrl(url)) diff --git a/pmgwidgets/widgets/basic/trees/filetree.py b/pmgwidgets/widgets/basic/trees/filetree.py index 171f61a5..3ced79ed 100644 --- a/pmgwidgets/widgets/basic/trees/filetree.py +++ b/pmgwidgets/widgets/basic/trees/filetree.py @@ -1,9 +1,9 @@ import os from typing import List -from qtpy.QtCore import Qt, QModelIndex, Signal, QLocale, QTranslator, QMimeData, QUrl -from qtpy.QtGui import QCursor, QKeySequence, QClipboard -from qtpy.QtWidgets import QTreeView, QFileSystemModel, QMenu, QApplication, QMessageBox, QInputDialog, \ +from PySide2.QtCore import Qt, QModelIndex, Signal, QLocale, QTranslator, QMimeData, QUrl +from PySide2.QtGui import QCursor, QKeySequence, QClipboard +from PySide2.QtWidgets import QTreeView, QFileSystemModel, QMenu, QApplication, QMessageBox, QInputDialog, \ QLineEdit, QDialog, QVBoxLayout, QDialogButtonBox, QPushButton, QHBoxLayout, QLabel, QShortcut, QCheckBox from pmgwidgets.widgets.basic.trees.treecheck import PMCheckTree from pmgwidgets.utilities.source.translation import create_translator diff --git a/pmgwidgets/widgets/basic/trees/jsontree.py b/pmgwidgets/widgets/basic/trees/jsontree.py index 5afda696..a7f24b6d 100644 --- a/pmgwidgets/widgets/basic/trees/jsontree.py +++ b/pmgwidgets/widgets/basic/trees/jsontree.py @@ -5,8 +5,8 @@ import os import time from typing import Dict, Callable, Any -from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu -from qtpy.QtCore import Signal, Qt, QTimer, QLocale +from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu +from PySide2.QtCore import Signal, Qt, QTimer, QLocale from pmgwidgets.utilities.source.translation import create_translator @@ -204,7 +204,7 @@ class PMGJsonTree(QTreeWidget): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication import sys app = QApplication(sys.argv) diff --git a/pmgwidgets/widgets/basic/trees/treecheck.py b/pmgwidgets/widgets/basic/trees/treecheck.py index b0a5631a..9d59c392 100644 --- a/pmgwidgets/widgets/basic/trees/treecheck.py +++ b/pmgwidgets/widgets/basic/trees/treecheck.py @@ -4,8 +4,8 @@ """ import os from typing import Dict -from qtpy.QtCore import Qt, QLocale -from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication, QTreeWidgetItemIterator +from PySide2.QtCore import Qt, QLocale +from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication, QTreeWidgetItemIterator import sys from pmgwidgets.utilities.source.translation import create_translator diff --git a/pmgwidgets/widgets/basic/trees/varattrtree.py b/pmgwidgets/widgets/basic/trees/varattrtree.py index 342c58fa..60c33ba3 100644 --- a/pmgwidgets/widgets/basic/trees/varattrtree.py +++ b/pmgwidgets/widgets/basic/trees/varattrtree.py @@ -1,8 +1,8 @@ import os from typing import Dict, TYPE_CHECKING, Callable, Any -from qtpy.QtWidgets import QTreeWidget, QTreeWidgetItem, QWidget, QVBoxLayout, QPushButton, QHBoxLayout, QMenu -from qtpy.QtCore import Signal, Qt, QLocale +from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QWidget, QVBoxLayout, QPushButton, QHBoxLayout, QMenu +from PySide2.QtCore import Signal, Qt, QLocale class PMGAttrTree(QTreeWidget): @@ -197,7 +197,7 @@ class PMGAttrTree(QTreeWidget): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication, QTableWidget + from PySide2.QtWidgets import QApplication, QTableWidget import sys app = QApplication(sys.argv) diff --git a/pmgwidgets/widgets/composited/buttonpanel.py b/pmgwidgets/widgets/composited/buttonpanel.py index f90979df..3d679174 100644 --- a/pmgwidgets/widgets/composited/buttonpanel.py +++ b/pmgwidgets/widgets/composited/buttonpanel.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton class PMGButtonPanel(QWidget): diff --git a/pmgwidgets/widgets/composited/generalpanel.py b/pmgwidgets/widgets/composited/generalpanel.py index 019dc595..a76a348d 100644 --- a/pmgwidgets/widgets/composited/generalpanel.py +++ b/pmgwidgets/widgets/composited/generalpanel.py @@ -11,10 +11,10 @@ qq:1295752786@qq.com """ import logging -from qtpy.QtGui import QCloseEvent -from qtpy.QtWidgets import QSpacerItem, QSizePolicy, QDialog, QFrame, QVBoxLayout, QHBoxLayout, QPushButton, \ +from PySide2.QtGui import QCloseEvent +from PySide2.QtWidgets import QSpacerItem, QSizePolicy, QDialog, QFrame, QVBoxLayout, QHBoxLayout, QPushButton, \ QDialogButtonBox -from qtpy.QtCore import Signal +from PySide2.QtCore import Signal from typing import Any, List, Tuple, Dict, Callable, Union, Optional from pmgwidgets.widgets.extended import (BaseExtendedWidget, PMGCheckCtrl, PMGColorCtrl, PMGEvalCtrl, PMGComboCtrl, @@ -364,7 +364,7 @@ def parse_simplified_pmgjson(identifier, data, params) -> Optional[List[Union[in if __name__ == '__main__': import sys - from qtpy.QtWidgets import QApplication, QWidget, QPushButton, QDialogButtonBox + from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QDialogButtonBox app = QApplication(sys.argv) # 类型;名称;显示的提示文字;初始值;//单位;范围 diff --git a/pmgwidgets/widgets/extended/base/baseextendedwidget.py b/pmgwidgets/widgets/extended/base/baseextendedwidget.py index f030c24d..b5a97448 100644 --- a/pmgwidgets/widgets/extended/base/baseextendedwidget.py +++ b/pmgwidgets/widgets/extended/base/baseextendedwidget.py @@ -3,8 +3,8 @@ import string import sys import time from typing import List, Dict, Tuple, Union, Callable, Any -from qtpy.QtCore import Signal -from qtpy.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QFrame +from PySide2.QtCore import Signal +from PySide2.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QFrame class BaseExtendedWidget(QFrame): diff --git a/pmgwidgets/widgets/extended/checkbuttons/check.py b/pmgwidgets/widgets/extended/checkbuttons/check.py index 77f1d04a..86686bf4 100644 --- a/pmgwidgets/widgets/extended/checkbuttons/check.py +++ b/pmgwidgets/widgets/extended/checkbuttons/check.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLabel, QHBoxLayout, QCheckBox +from PySide2.QtWidgets import QLabel, QHBoxLayout, QCheckBox from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/comboboxes/combo.py b/pmgwidgets/widgets/extended/comboboxes/combo.py index 4c8c1529..74f01599 100644 --- a/pmgwidgets/widgets/extended/comboboxes/combo.py +++ b/pmgwidgets/widgets/extended/comboboxes/combo.py @@ -1,6 +1,6 @@ from typing import List, Any -from qtpy.QtWidgets import QLabel, QHBoxLayout, QComboBox +from PySide2.QtWidgets import QLabel, QHBoxLayout, QComboBox from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/baseentryctrl.py b/pmgwidgets/widgets/extended/entries/baseentryctrl.py index 74e27deb..88aafca2 100644 --- a/pmgwidgets/widgets/extended/entries/baseentryctrl.py +++ b/pmgwidgets/widgets/extended/entries/baseentryctrl.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLineEdit +from PySide2.QtWidgets import QLineEdit from ..base import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/colorctrl.py b/pmgwidgets/widgets/extended/entries/colorctrl.py index d2f1f22d..ace118eb 100644 --- a/pmgwidgets/widgets/extended/entries/colorctrl.py +++ b/pmgwidgets/widgets/extended/entries/colorctrl.py @@ -1,7 +1,7 @@ from typing import Tuple -from qtpy.QtGui import QColor -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout, QPushButton, QColorDialog +from PySide2.QtGui import QColor +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout, QPushButton, QColorDialog from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/evalctrl.py b/pmgwidgets/widgets/extended/entries/evalctrl.py index 9b4e9baf..4bc69d7f 100644 --- a/pmgwidgets/widgets/extended/entries/evalctrl.py +++ b/pmgwidgets/widgets/extended/entries/evalctrl.py @@ -1,6 +1,6 @@ from typing import Any -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout, QPushButton, QMessageBox +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout, QPushButton, QMessageBox from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/filectrl.py b/pmgwidgets/widgets/extended/entries/filectrl.py index 4ba14bff..37f0f097 100644 --- a/pmgwidgets/widgets/extended/entries/filectrl.py +++ b/pmgwidgets/widgets/extended/entries/filectrl.py @@ -1,5 +1,5 @@ import os -from qtpy.QtWidgets import QPushButton, QLineEdit, QLabel, QHBoxLayout, QFileDialog +from PySide2.QtWidgets import QPushButton, QLineEdit, QLabel, QHBoxLayout, QFileDialog from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/folderctrl.py b/pmgwidgets/widgets/extended/entries/folderctrl.py index eb111989..486c29d1 100644 --- a/pmgwidgets/widgets/extended/entries/folderctrl.py +++ b/pmgwidgets/widgets/extended/entries/folderctrl.py @@ -1,5 +1,5 @@ import os -from qtpy.QtWidgets import QPushButton, QLineEdit, QLabel, QHBoxLayout, QFileDialog +from PySide2.QtWidgets import QPushButton, QLineEdit, QLabel, QHBoxLayout, QFileDialog from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/keymappingctrl.py b/pmgwidgets/widgets/extended/entries/keymappingctrl.py index d50991d2..e2d35022 100644 --- a/pmgwidgets/widgets/extended/entries/keymappingctrl.py +++ b/pmgwidgets/widgets/extended/entries/keymappingctrl.py @@ -1,6 +1,6 @@ -from qtpy.QtCore import Qt -from qtpy.QtGui import QKeyEvent, QKeySequence -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout +from PySide2.QtCore import Qt +from PySide2.QtGui import QKeyEvent, QKeySequence +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/linectrl.py b/pmgwidgets/widgets/extended/entries/linectrl.py index 35b09314..02f8629f 100644 --- a/pmgwidgets/widgets/extended/entries/linectrl.py +++ b/pmgwidgets/widgets/extended/entries/linectrl.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/entries/numctrl.py b/pmgwidgets/widgets/extended/entries/numctrl.py index 214e6da1..cbaf4bea 100644 --- a/pmgwidgets/widgets/extended/entries/numctrl.py +++ b/pmgwidgets/widgets/extended/entries/numctrl.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout from .baseentryctrl import PMGBaseEntryCtrl diff --git a/pmgwidgets/widgets/extended/entries/passwordctrl.py b/pmgwidgets/widgets/extended/entries/passwordctrl.py index c7a8e1ae..4a77f18d 100644 --- a/pmgwidgets/widgets/extended/entries/passwordctrl.py +++ b/pmgwidgets/widgets/extended/entries/passwordctrl.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLineEdit, QLabel, QHBoxLayout +from PySide2.QtWidgets import QLineEdit, QLabel, QHBoxLayout from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/labels/label.py b/pmgwidgets/widgets/extended/labels/label.py index d4f68a03..0482aeba 100644 --- a/pmgwidgets/widgets/extended/labels/label.py +++ b/pmgwidgets/widgets/extended/labels/label.py @@ -1,4 +1,4 @@ -from qtpy.QtWidgets import QLabel, QVBoxLayout, QSpacerItem, QSizePolicy +from PySide2.QtWidgets import QLabel, QVBoxLayout, QSpacerItem, QSizePolicy from ..base import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/lists/listwgt.py b/pmgwidgets/widgets/extended/lists/listwgt.py index 26d105d3..ac610103 100644 --- a/pmgwidgets/widgets/extended/lists/listwgt.py +++ b/pmgwidgets/widgets/extended/lists/listwgt.py @@ -2,8 +2,8 @@ from typing import List, Callable from PySide2.QtGui import QStandardItemModel, QStandardItem, QMouseEvent from PySide2.QtWidgets import QListWidgetItem, QCompleter -from qtpy.QtCore import Qt, QStringListModel -from qtpy.QtWidgets import QLabel, QHBoxLayout, QListWidget, QVBoxLayout, QPushButton, QLineEdit +from PySide2.QtCore import Qt, QStringListModel +from PySide2.QtWidgets import QLabel, QHBoxLayout, QListWidget, QVBoxLayout, QPushButton, QLineEdit from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/plots/lines/timeseries.py b/pmgwidgets/widgets/extended/plots/lines/timeseries.py index 8e3017f9..46d576a6 100644 --- a/pmgwidgets/widgets/extended/plots/lines/timeseries.py +++ b/pmgwidgets/widgets/extended/plots/lines/timeseries.py @@ -1,7 +1,7 @@ from typing import List, Dict, Tuple import pyqtgraph as pg -from qtpy.QtWidgets import QHBoxLayout +from PySide2.QtWidgets import QHBoxLayout from pmgwidgets.widgets.extended.base import BaseExtendedWidget from pmgwidgets import iter_isinstance, TYPE_RANGE diff --git a/pmgwidgets/widgets/extended/spins/datetime.py b/pmgwidgets/widgets/extended/spins/datetime.py index b2944bf2..5ee083e2 100644 --- a/pmgwidgets/widgets/extended/spins/datetime.py +++ b/pmgwidgets/widgets/extended/spins/datetime.py @@ -1,8 +1,8 @@ import time from typing import Union, Tuple -from qtpy.QtCore import QCalendar, QDate -from qtpy.QtWidgets import QLabel, QHBoxLayout, QDateEdit +from PySide2.QtCore import QCalendar, QDate +from PySide2.QtWidgets import QLabel, QHBoxLayout, QDateEdit from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/spins/numberspin.py b/pmgwidgets/widgets/extended/spins/numberspin.py index bef420c2..2900f755 100644 --- a/pmgwidgets/widgets/extended/spins/numberspin.py +++ b/pmgwidgets/widgets/extended/spins/numberspin.py @@ -1,6 +1,6 @@ from typing import Union, Tuple -from qtpy.QtWidgets import QLabel, QHBoxLayout, QSpinBox, QDoubleSpinBox +from PySide2.QtWidgets import QLabel, QHBoxLayout, QSpinBox, QDoubleSpinBox from pmgwidgets.widgets.extended.base.baseextendedwidget import BaseExtendedWidget diff --git a/pmgwidgets/widgets/extended/tables/rulesctrl.py b/pmgwidgets/widgets/extended/tables/rulesctrl.py index c045d4fa..e68eeca4 100644 --- a/pmgwidgets/widgets/extended/tables/rulesctrl.py +++ b/pmgwidgets/widgets/extended/tables/rulesctrl.py @@ -4,7 +4,7 @@ import sys from typing import List, Union, Tuple, Dict, TYPE_CHECKING, Callable, Optional -from qtpy.QtWidgets import QWidget, QVBoxLayout, QTableWidget, QHBoxLayout, QPushButton, QTableWidgetItem, QHeaderView +from PySide2.QtWidgets import QWidget, QVBoxLayout, QTableWidget, QHBoxLayout, QPushButton, QTableWidgetItem, QHeaderView if TYPE_CHECKING: import pandas as pd from pmgwidgets import PANEL_VIEW_CLASS @@ -106,7 +106,7 @@ class PMGRuleCtrl(BaseExtendedWidget): if __name__ == '__main__': - from qtpy.QtWidgets import QApplication + from PySide2.QtWidgets import QApplication app = QApplication([]) rc = PMGRuleCtrl(rules=[ diff --git a/pmgwidgets/widgets/extended/tables/tableshow.py b/pmgwidgets/widgets/extended/tables/tableshow.py index 8e603d6a..2ca2303e 100644 --- a/pmgwidgets/widgets/extended/tables/tableshow.py +++ b/pmgwidgets/widgets/extended/tables/tableshow.py @@ -1,8 +1,8 @@ from typing import List, Union -from qtpy.QtCore import Qt -from qtpy.QtGui import QBrush, QColor -from qtpy.QtWidgets import QHBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView +from PySide2.QtCore import Qt +from PySide2.QtGui import QBrush, QColor +from PySide2.QtWidgets import QHBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView from ..base import BaseExtendedWidget from pmgwidgets.utilities import color_str2tup -- Gitee From 0081c744db27973bd653a082adbcc7f8e8ea8fbc Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Fri, 9 Apr 2021 18:17:59 +0800 Subject: [PATCH 05/27] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86numpy.ndarray?= =?UTF-8?q?=E7=9A=84=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- "docs/PyMiner\344\273\213\347\273\215.md" | 5 +- pmgwidgets/widgets/basic/tables/tableviews.py | 152 +++++++++++++----- 3 files changed, 117 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 5a2bf0f2..0d193644 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,8 @@
`pyminer` 基于Python的开源、跨平台数据计算解决方案。 -
-pyminer 是一款基于Python的开源、跨平台数据计算解决方案,通过加载各种插件实现不同的需求,用易于操作的形式,在统一的界面中,通过数据计算实现用户所设想的任务。 +PyMiner 是一款基于Python的开源、跨平台数据计算解决方案,通过加载各种插件实现不同的需求,用易于操作的形式,在统一的界面中,通过数据计算实现用户所设想的任务。

diff --git "a/docs/PyMiner\344\273\213\347\273\215.md" "b/docs/PyMiner\344\273\213\347\273\215.md" index 3753a1dc..dc4c3969 100644 --- "a/docs/PyMiner\344\273\213\347\273\215.md" +++ "b/docs/PyMiner\344\273\213\347\273\215.md" @@ -1,4 +1,7 @@ # PyMiner——Python数据分析的利器 对于Python初学者而言,从安装Python解释器到配置专门的代码编辑器,无疑是十分耗费精力的。 -PyMiner是一款使用PyQt和PySide2编写的数据分析软件,同时也是一种 \ No newline at end of file +PyMiner是一款使用PySide2编写的数据分析软件,内部集成了数据分析的常用包,并且将常见操作封装为图形界面的形式,提供低代码的数据处理交互。 + +在线文档可以看这里: +[在线文档](https://gitee.com/py2cn/pyminer/wikis/%E7%AE%80%E4%BB%8B?sort_id=2761029) \ No newline at end of file diff --git a/pmgwidgets/widgets/basic/tables/tableviews.py b/pmgwidgets/widgets/basic/tables/tableviews.py index 3664d91a..36c0720d 100644 --- a/pmgwidgets/widgets/basic/tables/tableviews.py +++ b/pmgwidgets/widgets/basic/tables/tableviews.py @@ -8,13 +8,12 @@ 作者:侯展意 """ import os -import string import sys import typing - +import logging from PySide2.QtGui import QColor -from PySide2.QtWidgets import QSpacerItem +from PySide2.QtWidgets import QSpacerItem, QComboBox, QSpinBox, QLabel from PySide2.QtWidgets import QTableView, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton, \ QMessageBox, QInputDialog, QMenu, QDialog, QDialogButtonBox, QShortcut, QSizePolicy from PySide2.QtCore import QAbstractTableModel, QModelIndex, Signal, QLocale, QCoreApplication @@ -27,6 +26,7 @@ from pmgwidgets.widgets.basic.dialogs.textdialog import TextShowDialog if typing.TYPE_CHECKING: import numpy as np +logger = logging.getLogger(__name__) class InputValueDialog(QDialog): UP = -1 @@ -138,7 +138,7 @@ class TableModelForNumpyArray(BaseAbstractTableModel): col = index.column() row = index.row() - if len(self._data.shape) == 1: + if len(self._data.shape) == 1: # 一维矩阵 self.beginResetModel() self._data[row] = value self.dirty = True @@ -148,6 +148,7 @@ class TableModelForNumpyArray(BaseAbstractTableModel): if 0 <= col < self._data.shape[1]: self.beginResetModel() self._data[row, col] = value + self.dirty = True self.endResetModel() return True @@ -158,15 +159,19 @@ class TableModelForNumpyArray(BaseAbstractTableModel): if len(self._data.shape) >= 2: value = self._data[index.row(), index.column()] else: - value = self._data[index.row()] + value = self._data[index.column()] return dataformat(value) def rowCount(self, index): - return self._data.shape[0] + if len(self._data.shape) >= 2: + return self._data.shape[0] + else: + return 1 + # return self._data.shape[0] def columnCount(self, index): if len(self._data.shape) == 1: - return 1 + return self._data.shape[0] else: return self._data.shape[1] @@ -347,7 +352,7 @@ class PMTableView(QTableView): QMessageBox.warning(self, QCoreApplication.translate("PMTableView", "Error"), QCoreApplication.translate("PMTableView", "Column name \'%s\', type\'%s\' duplicated with existing column!" % ( - col_name, type(col_name)))) + col_name, type(col_name)))) elif operation == self.DELETE_COLUMN: # prev = pd_data.iloc[:row] @@ -367,6 +372,14 @@ class PMTableView(QTableView): return self.model._data def show_data(self, data): + """ + data可能是self.data,也可能是self.data的一部分。 + Args: + data: + + Returns: + + """ import pandas as pd import numpy as np if isinstance(data, pd.DataFrame): @@ -387,7 +400,6 @@ class PMTableView(QTableView): def mouseDoubleClickEvent(self, event: 'QMouseEvent') -> None: """ - TODO:编辑功能无效,暂时需要屏蔽掉。 Args: event: @@ -404,13 +416,17 @@ class PMTableView(QTableView): def show_edit_dialog(self, row, col): import pandas as pd + import numpy as np data = self.model._data - if isinstance(data, pd.DataFrame): + if isinstance(data, (pd.DataFrame, np.ndarray)): def on_edited(text): from pandas import Timestamp, Period, Interval try: result = eval(text) - data.iloc[row, col] = result + if isinstance(data, pd.DataFrame): + data.iloc[row, col] = result + elif isinstance(data, np.ndarray): + data[row, col] = result self.signal_need_save.emit(True) except: import traceback @@ -424,7 +440,12 @@ class PMTableView(QTableView): self.setCurrentIndex(self.model.index(target_row, col)) self.show_edit_dialog(target_row, col) - original_data = data.iloc[row, col] + if isinstance(data, pd.DataFrame): + original_data = data.iloc[row, col] + elif isinstance(data, np.ndarray): + original_data = data[row, col] + else: + raise NotImplementedError dlg = InputValueDialog(self) dlg.setWindowTitle(QCoreApplication.translate('PMTableView', 'Input New Value')) @@ -468,10 +489,18 @@ class PMGTableViewer(QWidget): self.layout().addLayout(self.top_layout) self.table_view = table_view self.slice_input = QLineEdit() - self.help_button = QPushButton(QCoreApplication.translate('PMGTableViewer', 'Help')) - self.slice_refresh_button = QPushButton(QCoreApplication.translate('PMGTableViewer', 'Slice')) - self.save_change_button = QPushButton(QCoreApplication.translate('PMGTableViewer', 'Save')) - self.goto_cell_button = QPushButton(QCoreApplication.translate('PMGTableViewer', 'Go To Cell')) + self.help_button = QPushButton(QCoreApplication.translate('PMGTableViewer', '帮助')) + self.slice_refresh_button = QPushButton(QCoreApplication.translate('PMGTableViewer', '切片')) + self.save_change_button = QPushButton(QCoreApplication.translate('PMGTableViewer', '保存')) + self.goto_cell_button = QPushButton(QCoreApplication.translate('PMGTableViewer', '前往单元格')) + + self.label_slice_axis2 = QLabel("高度索引:") + + self.slice_axis2 = QSpinBox() + self.slice_axis2.setMinimum(0) + self.slice_axis2.setSingleStep(1) + self.slice_axis2.setMaximum(0) + self.slice_axis2.valueChanged.connect(self.on_axis2_value_changed) self.save_change_button.clicked.connect(self.on_save) self.slice_refresh_button.clicked.connect(self.slice) @@ -482,6 +511,13 @@ class PMGTableViewer(QWidget): self.table_view.signal_need_save.connect(self.signal_need_save.emit) self.signal_need_save.connect(self.on_signal_need_save) + + self.top_layout.addWidget(self.label_slice_axis2) + self.top_layout.addWidget(self.slice_axis2) + + self.label_slice_axis2.hide() + self.slice_axis2.hide() + self.top_layout.addWidget(self.goto_cell_button) self.top_layout.addWidget(self.save_change_button) self.top_layout.addWidget(self.help_button) @@ -498,8 +534,23 @@ class PMGTableViewer(QWidget): self.shortcut_goto = QShortcut(QKeySequence('Ctrl+G'), self.table_view, context=Qt.WidgetShortcut) self.shortcut_goto.activated.connect(self.on_goto_cell) + def on_axis2_value_changed(self): + """ + 当显示多维数组时,如果改变第三维的索引,就调用这个函数 + Returns: + + """ + import numpy as np + if isinstance(self.table_view.data, np.ndarray): + if len(self.table_view.data.shape) > 2: + self.table_view.show_data(self.table_view.data[self.slice_axis2.value(), :, :]) + + def on_high_dimensional_array(self, high_dimensional: bool): + self.label_slice_axis2.setVisible(high_dimensional) + self.slice_axis2.setVisible(high_dimensional) + def on_help(self): - dlg = TextShowDialog(title=QCoreApplication.translate('PMGTableViewer', 'Help')) + dlg = TextShowDialog(title=QCoreApplication.translate('PMGTableViewer', '帮助')) with open(os.path.join(os.path.dirname(__file__), 'help', 'help.md'), 'r', encoding='utf8', errors='replace') as f: dlg.set_markdown(f.read()) @@ -518,7 +569,7 @@ class PMGTableViewer(QWidget): self.signal_need_save.emit(False) self.data_modified_signal.emit() - def set_data(self, data: typing.Any) -> None: + def set_data(self, data: typing.Any) -> bool: """ set_data方法在初次调用时,设置其内部的data参数; 当后面调用的时候,不会更改内部的data参数。 @@ -528,13 +579,28 @@ class PMGTableViewer(QWidget): :param data: :return: """ + import numpy as np + if isinstance(data, np.ndarray): + if len(data.shape) > 3: + QMessageBox.warning(self, "提示", "目前只支持三维及以下数组的查看") + return False + elif len(data.shape) == 3: + self.slice_axis2.setMaximum(data.shape[0] - 1) + + # self.slice_axis2.setValue(0) + self.on_high_dimensional_array(len(data.shape) == 3) + + if self.table_view is not None: self.table_view.set_data(data) self.slice_input.setText(self.table_view.get_default_slicing_statement()) - self.slice() + if isinstance(data, np.ndarray): + if len(data.shape) > 2: + self.on_axis2_value_changed() + return True def get_data(self): - return self.table_view.model._data + return self.table_view.data def slice(self): """ @@ -567,7 +633,7 @@ class PMGTableViewer(QWidget): min_row, max_row = 1, self.table_view.model.rowCount(None) current_row = self.table_view.currentIndex().row() + 1 current_col = self.table_view.currentIndex().column() + 1 - row, _ = QInputDialog.getInt(self, QCoreApplication.translate('PMGTableViewer', 'Input Row'), + row, _ = QInputDialog.getInt(self, QCoreApplication.translate('PMGTableViewer', '输入行'), QCoreApplication.translate('PMGTableViewer', 'Target Row No.:({min}~{max})').format(min=min_row, max=max_row), @@ -580,31 +646,37 @@ class PMGTableViewer(QWidget): if __name__ == '__main__': - import pandas as pd - import numpy as np import datetime + import numpy as np + import pandas as pd app = QApplication(sys.argv) table = PMGTableViewer(table_view=PMTableView()) - - data = np.random.random((5, 3, 3, 3)) - data = pd.DataFrame([['aaa', 'bbb', 0.1, 0.0001, True, pd.Timestamp(datetime.datetime(2012, 5, 1))], - ['rrr', 'aaaaaa', False, False, True, pd.Timestamp(datetime.datetime(2012, 5, 1))], - ] * 1000 - ) - print(data.iloc[2, 5]) - + data = np.arange(1, 17).reshape(2, 2, 4) table.show() + ret = table.set_data(data) - table.set_data(data) - - table.setWindowTitle('Pandas数据集 显示多种数据') - - data2 = pd.DataFrame(np.array([1 + 1j, 1 + 2j, 1 + 2.0j])) table2 = PMGTableViewer(table_view=PMTableView()) + data = np.arange(1, 17).reshape(2, 8) table2.show() - table2.setWindowTitle('Pandas数据集复数显示') - table2.set_data(data2) - print(data.dtypes) - app.exec_() + ret = table2.set_data(data) + + table3 = PMGTableViewer(table_view=PMTableView()) + data = np.arange(1, 17) + table3.show() + ret = table3.set_data(data) + + + if not ret: + table.close() + else: + app.exec_() + # table.setWindowTitle('Pandas数据集 显示多种数据') + + # data2 = pd.DataFrame(np.array([1 + 1j, 1 + 2j, 1 + 2.0j])) + # table2 = PMGTableViewer(table_view=PMTableView()) + # # table2.show() + # table2.setWindowTitle('Pandas数据集复数显示') + # table2.set_data(data2) + # print(data.dtypes) -- Gitee From 6c4d7781adb6a870da7a83021a022ef8c147cf44 Mon Sep 17 00:00:00 2001 From: hzy15610046011 <1295752786@qq.com> Date: Sat, 10 Apr 2021 16:53:50 +0800 Subject: [PATCH 06/27] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9D=99=E6=80=81?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E6=96=87=E4=BB=B6=E5=A4=B9=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=87=E9=A2=98=E6=A0=8F=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E8=A1=A8=E4=B8=BA=E6=B5=85=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- pmgwidgets/widgets/basic/tables/tableviews.py | 8 +- pmlocalserver/server.py | 3 +- resources/qss/Fusion.qss | 8 +- resources/qss/standard.qss | 53 +- static/README.md | 1 + static/css/iview.min.css | 1 + static/js/echarts.min.js | 22 + static/js/element-ui/CHANGELOG.en-US.md | 1774 + static/js/element-ui/CHANGELOG.es.md | 1782 + static/js/element-ui/CHANGELOG.fr-FR.md | 1774 + static/js/element-ui/CHANGELOG.zh-CN.md | 1775 + static/js/element-ui/README.md | 146 + static/js/element-ui/lib/alert.js | 419 + static/js/element-ui/lib/aside.js | 276 + static/js/element-ui/lib/autocomplete.js | 952 + static/js/element-ui/lib/avatar.js | 362 + static/js/element-ui/lib/backtop.js | 401 + static/js/element-ui/lib/badge.js | 333 + static/js/element-ui/lib/breadcrumb-item.js | 321 + static/js/element-ui/lib/breadcrumb.js | 292 + static/js/element-ui/lib/button-group.js | 261 + static/js/element-ui/lib/button.js | 356 + static/js/element-ui/lib/calendar.js | 934 + static/js/element-ui/lib/card.js | 296 + static/js/element-ui/lib/carousel-item.js | 432 + static/js/element-ui/lib/carousel.js | 697 + static/js/element-ui/lib/cascader-panel.js | 1555 + static/js/element-ui/lib/cascader.js | 1421 + static/js/element-ui/lib/checkbox-button.js | 582 + static/js/element-ui/lib/checkbox-group.js | 312 + static/js/element-ui/lib/checkbox.js | 626 + static/js/element-ui/lib/col.js | 176 + static/js/element-ui/lib/collapse-item.js | 496 + static/js/element-ui/lib/collapse.js | 328 + static/js/element-ui/lib/color-picker.js | 1957 + static/js/element-ui/lib/container.js | 287 + static/js/element-ui/lib/date-picker.js | 6270 +++ static/js/element-ui/lib/dialog.js | 597 + .../element-ui/lib/directives/mousewheel.js | 26 + .../element-ui/lib/directives/repeat-click.js | 30 + static/js/element-ui/lib/divider.js | 312 + static/js/element-ui/lib/drawer.js | 583 + static/js/element-ui/lib/dropdown-item.js | 315 + static/js/element-ui/lib/dropdown-menu.js | 350 + static/js/element-ui/lib/dropdown.js | 622 + static/js/element-ui/lib/element-ui.common.js | 41653 ++++++++++++++++ static/js/element-ui/lib/footer.js | 276 + static/js/element-ui/lib/form-item.js | 823 + static/js/element-ui/lib/form.js | 465 + static/js/element-ui/lib/header.js | 276 + static/js/element-ui/lib/icon.js | 264 + static/js/element-ui/lib/image.js | 1117 + static/js/element-ui/lib/index.js | 1 + static/js/element-ui/lib/infinite-scroll.js | 300 + static/js/element-ui/lib/input-number.js | 740 + static/js/element-ui/lib/input.js | 990 + static/js/element-ui/lib/link.js | 329 + static/js/element-ui/lib/loading.js | 630 + static/js/element-ui/lib/locale/format.js | 56 + static/js/element-ui/lib/locale/index.js | 63 + static/js/element-ui/lib/locale/lang/af-ZA.js | 123 + static/js/element-ui/lib/locale/lang/ar.js | 122 + static/js/element-ui/lib/locale/lang/bg.js | 123 + static/js/element-ui/lib/locale/lang/ca.js | 122 + static/js/element-ui/lib/locale/lang/cs-CZ.js | 125 + static/js/element-ui/lib/locale/lang/da.js | 122 + static/js/element-ui/lib/locale/lang/de.js | 124 + static/js/element-ui/lib/locale/lang/ee.js | 123 + static/js/element-ui/lib/locale/lang/el.js | 123 + static/js/element-ui/lib/locale/lang/en.js | 123 + static/js/element-ui/lib/locale/lang/eo.js | 123 + static/js/element-ui/lib/locale/lang/es.js | 122 + static/js/element-ui/lib/locale/lang/eu.js | 123 + static/js/element-ui/lib/locale/lang/fa.js | 123 + static/js/element-ui/lib/locale/lang/fi.js | 123 + static/js/element-ui/lib/locale/lang/fr.js | 122 + static/js/element-ui/lib/locale/lang/he.js | 123 + static/js/element-ui/lib/locale/lang/hr.js | 123 + static/js/element-ui/lib/locale/lang/hu.js | 122 + static/js/element-ui/lib/locale/lang/hy-AM.js | 123 + static/js/element-ui/lib/locale/lang/id.js | 123 + static/js/element-ui/lib/locale/lang/it.js | 122 + static/js/element-ui/lib/locale/lang/ja.js | 123 + static/js/element-ui/lib/locale/lang/kg.js | 123 + static/js/element-ui/lib/locale/lang/km.js | 123 + static/js/element-ui/lib/locale/lang/ko.js | 123 + static/js/element-ui/lib/locale/lang/ku.js | 123 + static/js/element-ui/lib/locale/lang/kz.js | 123 + static/js/element-ui/lib/locale/lang/lt.js | 123 + static/js/element-ui/lib/locale/lang/lv.js | 123 + static/js/element-ui/lib/locale/lang/mn.js | 123 + static/js/element-ui/lib/locale/lang/nb-NO.js | 122 + static/js/element-ui/lib/locale/lang/nl.js | 123 + static/js/element-ui/lib/locale/lang/pl.js | 123 + static/js/element-ui/lib/locale/lang/pt-br.js | 123 + static/js/element-ui/lib/locale/lang/pt.js | 123 + static/js/element-ui/lib/locale/lang/ro.js | 123 + static/js/element-ui/lib/locale/lang/ru-RU.js | 123 + static/js/element-ui/lib/locale/lang/sk.js | 125 + static/js/element-ui/lib/locale/lang/sl.js | 123 + static/js/element-ui/lib/locale/lang/sr.js | 123 + static/js/element-ui/lib/locale/lang/sv-SE.js | 123 + static/js/element-ui/lib/locale/lang/ta.js | 122 + static/js/element-ui/lib/locale/lang/th.js | 123 + static/js/element-ui/lib/locale/lang/tk.js | 123 + static/js/element-ui/lib/locale/lang/tr-TR.js | 123 + static/js/element-ui/lib/locale/lang/ua.js | 123 + static/js/element-ui/lib/locale/lang/ug-CN.js | 123 + static/js/element-ui/lib/locale/lang/uz-UZ.js | 123 + static/js/element-ui/lib/locale/lang/vi.js | 123 + static/js/element-ui/lib/locale/lang/zh-CN.js | 123 + static/js/element-ui/lib/locale/lang/zh-TW.js | 123 + static/js/element-ui/lib/main.js | 263 + static/js/element-ui/lib/menu-item-group.js | 307 + static/js/element-ui/lib/menu-item.js | 490 + static/js/element-ui/lib/menu.js | 864 + static/js/element-ui/lib/message-box.js | 1191 + static/js/element-ui/lib/message.js | 532 + static/js/element-ui/lib/mixins/emitter.js | 36 + static/js/element-ui/lib/mixins/focus.js | 15 + static/js/element-ui/lib/mixins/locale.js | 17 + static/js/element-ui/lib/mixins/migrating.js | 69 + static/js/element-ui/lib/notification.js | 614 + static/js/element-ui/lib/option-group.js | 343 + static/js/element-ui/lib/option.js | 474 + static/js/element-ui/lib/page-header.js | 318 + static/js/element-ui/lib/pagination.js | 946 + static/js/element-ui/lib/popconfirm.js | 456 + static/js/element-ui/lib/popover.js | 616 + static/js/element-ui/lib/progress.js | 575 + static/js/element-ui/lib/radio-button.js | 460 + static/js/element-ui/lib/radio-group.js | 388 + static/js/element-ui/lib/radio.js | 494 + static/js/element-ui/lib/rate.js | 669 + static/js/element-ui/lib/row.js | 151 + static/js/element-ui/lib/scrollbar.js | 422 + static/js/element-ui/lib/select.js | 2163 + static/js/element-ui/lib/slider.js | 1201 + static/js/element-ui/lib/spinner.js | 300 + static/js/element-ui/lib/step.js | 521 + static/js/element-ui/lib/steps.js | 341 + static/js/element-ui/lib/submenu.js | 700 + static/js/element-ui/lib/switch.js | 551 + static/js/element-ui/lib/tab-pane.js | 331 + static/js/element-ui/lib/table-column.js | 930 + static/js/element-ui/lib/table.js | 4901 ++ static/js/element-ui/lib/tabs.js | 925 + static/js/element-ui/lib/tag.js | 303 + .../js/element-ui/lib/theme-chalk/alert.css | 1 + .../js/element-ui/lib/theme-chalk/aside.css | 1 + .../lib/theme-chalk/autocomplete.css | 1 + .../js/element-ui/lib/theme-chalk/avatar.css | 1 + .../js/element-ui/lib/theme-chalk/backtop.css | 1 + .../js/element-ui/lib/theme-chalk/badge.css | 1 + static/js/element-ui/lib/theme-chalk/base.css | 1 + .../lib/theme-chalk/breadcrumb-item.css | 0 .../element-ui/lib/theme-chalk/breadcrumb.css | 1 + .../lib/theme-chalk/button-group.css | 0 .../js/element-ui/lib/theme-chalk/button.css | 1 + .../element-ui/lib/theme-chalk/calendar.css | 1 + static/js/element-ui/lib/theme-chalk/card.css | 1 + .../lib/theme-chalk/carousel-item.css | 1 + .../element-ui/lib/theme-chalk/carousel.css | 1 + .../lib/theme-chalk/cascader-panel.css | 1 + .../element-ui/lib/theme-chalk/cascader.css | 1 + .../lib/theme-chalk/checkbox-button.css | 0 .../lib/theme-chalk/checkbox-group.css | 0 .../element-ui/lib/theme-chalk/checkbox.css | 1 + static/js/element-ui/lib/theme-chalk/col.css | 1 + .../lib/theme-chalk/collapse-item.css | 0 .../element-ui/lib/theme-chalk/collapse.css | 1 + .../lib/theme-chalk/color-picker.css | 1 + .../element-ui/lib/theme-chalk/container.css | 1 + .../lib/theme-chalk/date-picker.css | 1 + .../js/element-ui/lib/theme-chalk/dialog.css | 1 + .../js/element-ui/lib/theme-chalk/display.css | 1 + .../js/element-ui/lib/theme-chalk/divider.css | 1 + .../js/element-ui/lib/theme-chalk/drawer.css | 1 + .../lib/theme-chalk/dropdown-item.css | 0 .../lib/theme-chalk/dropdown-menu.css | 0 .../element-ui/lib/theme-chalk/dropdown.css | 1 + .../lib/theme-chalk/fonts/element-icons.ttf | Bin 0 -> 55956 bytes .../lib/theme-chalk/fonts/element-icons.woff | Bin 0 -> 28200 bytes .../js/element-ui/lib/theme-chalk/footer.css | 1 + .../element-ui/lib/theme-chalk/form-item.css | 0 static/js/element-ui/lib/theme-chalk/form.css | 1 + .../js/element-ui/lib/theme-chalk/header.css | 1 + static/js/element-ui/lib/theme-chalk/icon.css | 1 + .../js/element-ui/lib/theme-chalk/image.css | 1 + .../js/element-ui/lib/theme-chalk/index.css | 1 + .../lib/theme-chalk/infinite-scroll.css | 0 .../lib/theme-chalk/infiniteScroll.css | 0 .../lib/theme-chalk/input-number.css | 1 + .../js/element-ui/lib/theme-chalk/input.css | 1 + static/js/element-ui/lib/theme-chalk/link.css | 1 + .../js/element-ui/lib/theme-chalk/loading.css | 1 + static/js/element-ui/lib/theme-chalk/main.css | 1 + .../lib/theme-chalk/menu-item-group.css | 0 .../element-ui/lib/theme-chalk/menu-item.css | 0 static/js/element-ui/lib/theme-chalk/menu.css | 1 + .../lib/theme-chalk/message-box.css | 1 + .../js/element-ui/lib/theme-chalk/message.css | 1 + .../lib/theme-chalk/notification.css | 1 + .../lib/theme-chalk/option-group.css | 1 + .../js/element-ui/lib/theme-chalk/option.css | 1 + .../lib/theme-chalk/page-header.css | 1 + .../element-ui/lib/theme-chalk/pagination.css | 1 + .../element-ui/lib/theme-chalk/popconfirm.css | 1 + .../js/element-ui/lib/theme-chalk/popover.css | 1 + .../js/element-ui/lib/theme-chalk/popper.css | 1 + .../element-ui/lib/theme-chalk/progress.css | 1 + .../lib/theme-chalk/radio-button.css | 1 + .../lib/theme-chalk/radio-group.css | 1 + .../js/element-ui/lib/theme-chalk/radio.css | 1 + static/js/element-ui/lib/theme-chalk/rate.css | 1 + .../js/element-ui/lib/theme-chalk/reset.css | 1 + static/js/element-ui/lib/theme-chalk/row.css | 1 + .../element-ui/lib/theme-chalk/scrollbar.css | 1 + .../lib/theme-chalk/select-dropdown.css | 1 + .../js/element-ui/lib/theme-chalk/select.css | 1 + .../js/element-ui/lib/theme-chalk/slider.css | 1 + .../js/element-ui/lib/theme-chalk/spinner.css | 1 + static/js/element-ui/lib/theme-chalk/step.css | 1 + .../js/element-ui/lib/theme-chalk/steps.css | 1 + .../js/element-ui/lib/theme-chalk/submenu.css | 0 .../js/element-ui/lib/theme-chalk/switch.css | 1 + .../element-ui/lib/theme-chalk/tab-pane.css | 0 .../lib/theme-chalk/table-column.css | 1 + .../js/element-ui/lib/theme-chalk/table.css | 1 + static/js/element-ui/lib/theme-chalk/tabs.css | 1 + static/js/element-ui/lib/theme-chalk/tag.css | 1 + .../lib/theme-chalk/time-picker.css | 1 + .../lib/theme-chalk/time-select.css | 1 + .../lib/theme-chalk/timeline-item.css | 1 + .../element-ui/lib/theme-chalk/timeline.css | 1 + .../js/element-ui/lib/theme-chalk/tooltip.css | 1 + .../element-ui/lib/theme-chalk/transfer.css | 1 + static/js/element-ui/lib/theme-chalk/tree.css | 1 + .../js/element-ui/lib/theme-chalk/upload.css | 1 + static/js/element-ui/lib/time-picker.js | 2931 ++ static/js/element-ui/lib/time-select.js | 1734 + static/js/element-ui/lib/timeline-item.js | 370 + static/js/element-ui/lib/timeline.js | 274 + static/js/element-ui/lib/tooltip.js | 423 + static/js/element-ui/lib/transfer.js | 1104 + .../lib/transitions/collapse-transition.js | 91 + static/js/element-ui/lib/tree.js | 2266 + static/js/element-ui/lib/umd/locale/af-ZA.js | 139 + static/js/element-ui/lib/umd/locale/ar.js | 138 + static/js/element-ui/lib/umd/locale/bg.js | 139 + static/js/element-ui/lib/umd/locale/ca.js | 138 + static/js/element-ui/lib/umd/locale/cs-CZ.js | 141 + static/js/element-ui/lib/umd/locale/da.js | 138 + static/js/element-ui/lib/umd/locale/de.js | 140 + static/js/element-ui/lib/umd/locale/ee.js | 139 + static/js/element-ui/lib/umd/locale/el.js | 139 + static/js/element-ui/lib/umd/locale/en.js | 139 + static/js/element-ui/lib/umd/locale/eo.js | 139 + static/js/element-ui/lib/umd/locale/es.js | 138 + static/js/element-ui/lib/umd/locale/eu.js | 139 + static/js/element-ui/lib/umd/locale/fa.js | 139 + static/js/element-ui/lib/umd/locale/fi.js | 139 + static/js/element-ui/lib/umd/locale/fr.js | 138 + static/js/element-ui/lib/umd/locale/he.js | 139 + static/js/element-ui/lib/umd/locale/hr.js | 139 + static/js/element-ui/lib/umd/locale/hu.js | 138 + static/js/element-ui/lib/umd/locale/hy-AM.js | 139 + static/js/element-ui/lib/umd/locale/id.js | 139 + static/js/element-ui/lib/umd/locale/it.js | 138 + static/js/element-ui/lib/umd/locale/ja.js | 139 + static/js/element-ui/lib/umd/locale/kg.js | 139 + static/js/element-ui/lib/umd/locale/km.js | 139 + static/js/element-ui/lib/umd/locale/ko.js | 139 + static/js/element-ui/lib/umd/locale/ku.js | 139 + static/js/element-ui/lib/umd/locale/kz.js | 139 + static/js/element-ui/lib/umd/locale/lt.js | 139 + static/js/element-ui/lib/umd/locale/lv.js | 139 + static/js/element-ui/lib/umd/locale/mn.js | 139 + static/js/element-ui/lib/umd/locale/nb-NO.js | 138 + static/js/element-ui/lib/umd/locale/nl.js | 139 + static/js/element-ui/lib/umd/locale/pl.js | 139 + static/js/element-ui/lib/umd/locale/pt-br.js | 139 + static/js/element-ui/lib/umd/locale/pt.js | 139 + static/js/element-ui/lib/umd/locale/ro.js | 139 + static/js/element-ui/lib/umd/locale/ru-RU.js | 139 + static/js/element-ui/lib/umd/locale/sk.js | 141 + static/js/element-ui/lib/umd/locale/sl.js | 139 + static/js/element-ui/lib/umd/locale/sr.js | 139 + static/js/element-ui/lib/umd/locale/sv-SE.js | 139 + static/js/element-ui/lib/umd/locale/ta.js | 138 + static/js/element-ui/lib/umd/locale/th.js | 139 + static/js/element-ui/lib/umd/locale/tk.js | 139 + static/js/element-ui/lib/umd/locale/tr-TR.js | 139 + static/js/element-ui/lib/umd/locale/ua.js | 139 + static/js/element-ui/lib/umd/locale/ug-CN.js | 139 + static/js/element-ui/lib/umd/locale/uz-UZ.js | 139 + static/js/element-ui/lib/umd/locale/vi.js | 139 + static/js/element-ui/lib/umd/locale/zh-CN.js | 139 + static/js/element-ui/lib/umd/locale/zh-TW.js | 139 + static/js/element-ui/lib/upload.js | 1398 + static/js/element-ui/lib/utils/after-leave.js | 35 + static/js/element-ui/lib/utils/aria-dialog.js | 104 + static/js/element-ui/lib/utils/aria-utils.js | 126 + .../js/element-ui/lib/utils/clickoutside.js | 79 + static/js/element-ui/lib/utils/date-util.js | 320 + static/js/element-ui/lib/utils/date.js | 369 + static/js/element-ui/lib/utils/dom.js | 234 + .../element-ui/lib/utils/menu/aria-menubar.js | 24 + .../lib/utils/menu/aria-menuitem.js | 62 + .../element-ui/lib/utils/menu/aria-submenu.js | 69 + static/js/element-ui/lib/utils/merge.js | 21 + static/js/element-ui/lib/utils/popper.js | 1261 + static/js/element-ui/lib/utils/popup/index.js | 233 + .../lib/utils/popup/popup-manager.js | 205 + .../js/element-ui/lib/utils/resize-event.js | 57 + .../element-ui/lib/utils/scroll-into-view.js | 38 + .../element-ui/lib/utils/scrollbar-width.js | 39 + static/js/element-ui/lib/utils/shared.js | 12 + static/js/element-ui/lib/utils/types.js | 30 + static/js/element-ui/lib/utils/util.js | 268 + static/js/element-ui/lib/utils/vdom.js | 13 + static/js/element-ui/lib/utils/vue-popper.js | 202 + static/js/element-ui/package.json | 148 + static/js/form-create.min.js | 8 + static/js/iview.min.js | 27 + static/js/jquery-3.5.1.min.js | 2 + static/js/vue.min.js | 6 + static/tutorials_page.html | 119 + 329 files changed, 130746 insertions(+), 36 deletions(-) create mode 100644 static/README.md create mode 100644 static/css/iview.min.css create mode 100644 static/js/echarts.min.js create mode 100644 static/js/element-ui/CHANGELOG.en-US.md create mode 100644 static/js/element-ui/CHANGELOG.es.md create mode 100644 static/js/element-ui/CHANGELOG.fr-FR.md create mode 100644 static/js/element-ui/CHANGELOG.zh-CN.md create mode 100644 static/js/element-ui/README.md create mode 100644 static/js/element-ui/lib/alert.js create mode 100644 static/js/element-ui/lib/aside.js create mode 100644 static/js/element-ui/lib/autocomplete.js create mode 100644 static/js/element-ui/lib/avatar.js create mode 100644 static/js/element-ui/lib/backtop.js create mode 100644 static/js/element-ui/lib/badge.js create mode 100644 static/js/element-ui/lib/breadcrumb-item.js create mode 100644 static/js/element-ui/lib/breadcrumb.js create mode 100644 static/js/element-ui/lib/button-group.js create mode 100644 static/js/element-ui/lib/button.js create mode 100644 static/js/element-ui/lib/calendar.js create mode 100644 static/js/element-ui/lib/card.js create mode 100644 static/js/element-ui/lib/carousel-item.js create mode 100644 static/js/element-ui/lib/carousel.js create mode 100644 static/js/element-ui/lib/cascader-panel.js create mode 100644 static/js/element-ui/lib/cascader.js create mode 100644 static/js/element-ui/lib/checkbox-button.js create mode 100644 static/js/element-ui/lib/checkbox-group.js create mode 100644 static/js/element-ui/lib/checkbox.js create mode 100644 static/js/element-ui/lib/col.js create mode 100644 static/js/element-ui/lib/collapse-item.js create mode 100644 static/js/element-ui/lib/collapse.js create mode 100644 static/js/element-ui/lib/color-picker.js create mode 100644 static/js/element-ui/lib/container.js create mode 100644 static/js/element-ui/lib/date-picker.js create mode 100644 static/js/element-ui/lib/dialog.js create mode 100644 static/js/element-ui/lib/directives/mousewheel.js create mode 100644 static/js/element-ui/lib/directives/repeat-click.js create mode 100644 static/js/element-ui/lib/divider.js create mode 100644 static/js/element-ui/lib/drawer.js create mode 100644 static/js/element-ui/lib/dropdown-item.js create mode 100644 static/js/element-ui/lib/dropdown-menu.js create mode 100644 static/js/element-ui/lib/dropdown.js create mode 100644 static/js/element-ui/lib/element-ui.common.js create mode 100644 static/js/element-ui/lib/footer.js create mode 100644 static/js/element-ui/lib/form-item.js create mode 100644 static/js/element-ui/lib/form.js create mode 100644 static/js/element-ui/lib/header.js create mode 100644 static/js/element-ui/lib/icon.js create mode 100644 static/js/element-ui/lib/image.js create mode 100644 static/js/element-ui/lib/index.js create mode 100644 static/js/element-ui/lib/infinite-scroll.js create mode 100644 static/js/element-ui/lib/input-number.js create mode 100644 static/js/element-ui/lib/input.js create mode 100644 static/js/element-ui/lib/link.js create mode 100644 static/js/element-ui/lib/loading.js create mode 100644 static/js/element-ui/lib/locale/format.js create mode 100644 static/js/element-ui/lib/locale/index.js create mode 100644 static/js/element-ui/lib/locale/lang/af-ZA.js create mode 100644 static/js/element-ui/lib/locale/lang/ar.js create mode 100644 static/js/element-ui/lib/locale/lang/bg.js create mode 100644 static/js/element-ui/lib/locale/lang/ca.js create mode 100644 static/js/element-ui/lib/locale/lang/cs-CZ.js create mode 100644 static/js/element-ui/lib/locale/lang/da.js create mode 100644 static/js/element-ui/lib/locale/lang/de.js create mode 100644 static/js/element-ui/lib/locale/lang/ee.js create mode 100644 static/js/element-ui/lib/locale/lang/el.js create mode 100644 static/js/element-ui/lib/locale/lang/en.js create mode 100644 static/js/element-ui/lib/locale/lang/eo.js create mode 100644 static/js/element-ui/lib/locale/lang/es.js create mode 100644 static/js/element-ui/lib/locale/lang/eu.js create mode 100644 static/js/element-ui/lib/locale/lang/fa.js create mode 100644 static/js/element-ui/lib/locale/lang/fi.js create mode 100644 static/js/element-ui/lib/locale/lang/fr.js create mode 100644 static/js/element-ui/lib/locale/lang/he.js create mode 100644 static/js/element-ui/lib/locale/lang/hr.js create mode 100644 static/js/element-ui/lib/locale/lang/hu.js create mode 100644 static/js/element-ui/lib/locale/lang/hy-AM.js create mode 100644 static/js/element-ui/lib/locale/lang/id.js create mode 100644 static/js/element-ui/lib/locale/lang/it.js create mode 100644 static/js/element-ui/lib/locale/lang/ja.js create mode 100644 static/js/element-ui/lib/locale/lang/kg.js create mode 100644 static/js/element-ui/lib/locale/lang/km.js create mode 100644 static/js/element-ui/lib/locale/lang/ko.js create mode 100644 static/js/element-ui/lib/locale/lang/ku.js create mode 100644 static/js/element-ui/lib/locale/lang/kz.js create mode 100644 static/js/element-ui/lib/locale/lang/lt.js create mode 100644 static/js/element-ui/lib/locale/lang/lv.js create mode 100644 static/js/element-ui/lib/locale/lang/mn.js create mode 100644 static/js/element-ui/lib/locale/lang/nb-NO.js create mode 100644 static/js/element-ui/lib/locale/lang/nl.js create mode 100644 static/js/element-ui/lib/locale/lang/pl.js create mode 100644 static/js/element-ui/lib/locale/lang/pt-br.js create mode 100644 static/js/element-ui/lib/locale/lang/pt.js create mode 100644 static/js/element-ui/lib/locale/lang/ro.js create mode 100644 static/js/element-ui/lib/locale/lang/ru-RU.js create mode 100644 static/js/element-ui/lib/locale/lang/sk.js create mode 100644 static/js/element-ui/lib/locale/lang/sl.js create mode 100644 static/js/element-ui/lib/locale/lang/sr.js create mode 100644 static/js/element-ui/lib/locale/lang/sv-SE.js create mode 100644 static/js/element-ui/lib/locale/lang/ta.js create mode 100644 static/js/element-ui/lib/locale/lang/th.js create mode 100644 static/js/element-ui/lib/locale/lang/tk.js create mode 100644 static/js/element-ui/lib/locale/lang/tr-TR.js create mode 100644 static/js/element-ui/lib/locale/lang/ua.js create mode 100644 static/js/element-ui/lib/locale/lang/ug-CN.js create mode 100644 static/js/element-ui/lib/locale/lang/uz-UZ.js create mode 100644 static/js/element-ui/lib/locale/lang/vi.js create mode 100644 static/js/element-ui/lib/locale/lang/zh-CN.js create mode 100644 static/js/element-ui/lib/locale/lang/zh-TW.js create mode 100644 static/js/element-ui/lib/main.js create mode 100644 static/js/element-ui/lib/menu-item-group.js create mode 100644 static/js/element-ui/lib/menu-item.js create mode 100644 static/js/element-ui/lib/menu.js create mode 100644 static/js/element-ui/lib/message-box.js create mode 100644 static/js/element-ui/lib/message.js create mode 100644 static/js/element-ui/lib/mixins/emitter.js create mode 100644 static/js/element-ui/lib/mixins/focus.js create mode 100644 static/js/element-ui/lib/mixins/locale.js create mode 100644 static/js/element-ui/lib/mixins/migrating.js create mode 100644 static/js/element-ui/lib/notification.js create mode 100644 static/js/element-ui/lib/option-group.js create mode 100644 static/js/element-ui/lib/option.js create mode 100644 static/js/element-ui/lib/page-header.js create mode 100644 static/js/element-ui/lib/pagination.js create mode 100644 static/js/element-ui/lib/popconfirm.js create mode 100644 static/js/element-ui/lib/popover.js create mode 100644 static/js/element-ui/lib/progress.js create mode 100644 static/js/element-ui/lib/radio-button.js create mode 100644 static/js/element-ui/lib/radio-group.js create mode 100644 static/js/element-ui/lib/radio.js create mode 100644 static/js/element-ui/lib/rate.js create mode 100644 static/js/element-ui/lib/row.js create mode 100644 static/js/element-ui/lib/scrollbar.js create mode 100644 static/js/element-ui/lib/select.js create mode 100644 static/js/element-ui/lib/slider.js create mode 100644 static/js/element-ui/lib/spinner.js create mode 100644 static/js/element-ui/lib/step.js create mode 100644 static/js/element-ui/lib/steps.js create mode 100644 static/js/element-ui/lib/submenu.js create mode 100644 static/js/element-ui/lib/switch.js create mode 100644 static/js/element-ui/lib/tab-pane.js create mode 100644 static/js/element-ui/lib/table-column.js create mode 100644 static/js/element-ui/lib/table.js create mode 100644 static/js/element-ui/lib/tabs.js create mode 100644 static/js/element-ui/lib/tag.js create mode 100644 static/js/element-ui/lib/theme-chalk/alert.css create mode 100644 static/js/element-ui/lib/theme-chalk/aside.css create mode 100644 static/js/element-ui/lib/theme-chalk/autocomplete.css create mode 100644 static/js/element-ui/lib/theme-chalk/avatar.css create mode 100644 static/js/element-ui/lib/theme-chalk/backtop.css create mode 100644 static/js/element-ui/lib/theme-chalk/badge.css create mode 100644 static/js/element-ui/lib/theme-chalk/base.css create mode 100644 static/js/element-ui/lib/theme-chalk/breadcrumb-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/breadcrumb.css create mode 100644 static/js/element-ui/lib/theme-chalk/button-group.css create mode 100644 static/js/element-ui/lib/theme-chalk/button.css create mode 100644 static/js/element-ui/lib/theme-chalk/calendar.css create mode 100644 static/js/element-ui/lib/theme-chalk/card.css create mode 100644 static/js/element-ui/lib/theme-chalk/carousel-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/carousel.css create mode 100644 static/js/element-ui/lib/theme-chalk/cascader-panel.css create mode 100644 static/js/element-ui/lib/theme-chalk/cascader.css create mode 100644 static/js/element-ui/lib/theme-chalk/checkbox-button.css create mode 100644 static/js/element-ui/lib/theme-chalk/checkbox-group.css create mode 100644 static/js/element-ui/lib/theme-chalk/checkbox.css create mode 100644 static/js/element-ui/lib/theme-chalk/col.css create mode 100644 static/js/element-ui/lib/theme-chalk/collapse-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/collapse.css create mode 100644 static/js/element-ui/lib/theme-chalk/color-picker.css create mode 100644 static/js/element-ui/lib/theme-chalk/container.css create mode 100644 static/js/element-ui/lib/theme-chalk/date-picker.css create mode 100644 static/js/element-ui/lib/theme-chalk/dialog.css create mode 100644 static/js/element-ui/lib/theme-chalk/display.css create mode 100644 static/js/element-ui/lib/theme-chalk/divider.css create mode 100644 static/js/element-ui/lib/theme-chalk/drawer.css create mode 100644 static/js/element-ui/lib/theme-chalk/dropdown-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/dropdown-menu.css create mode 100644 static/js/element-ui/lib/theme-chalk/dropdown.css create mode 100644 static/js/element-ui/lib/theme-chalk/fonts/element-icons.ttf create mode 100644 static/js/element-ui/lib/theme-chalk/fonts/element-icons.woff create mode 100644 static/js/element-ui/lib/theme-chalk/footer.css create mode 100644 static/js/element-ui/lib/theme-chalk/form-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/form.css create mode 100644 static/js/element-ui/lib/theme-chalk/header.css create mode 100644 static/js/element-ui/lib/theme-chalk/icon.css create mode 100644 static/js/element-ui/lib/theme-chalk/image.css create mode 100644 static/js/element-ui/lib/theme-chalk/index.css create mode 100644 static/js/element-ui/lib/theme-chalk/infinite-scroll.css create mode 100644 static/js/element-ui/lib/theme-chalk/infiniteScroll.css create mode 100644 static/js/element-ui/lib/theme-chalk/input-number.css create mode 100644 static/js/element-ui/lib/theme-chalk/input.css create mode 100644 static/js/element-ui/lib/theme-chalk/link.css create mode 100644 static/js/element-ui/lib/theme-chalk/loading.css create mode 100644 static/js/element-ui/lib/theme-chalk/main.css create mode 100644 static/js/element-ui/lib/theme-chalk/menu-item-group.css create mode 100644 static/js/element-ui/lib/theme-chalk/menu-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/menu.css create mode 100644 static/js/element-ui/lib/theme-chalk/message-box.css create mode 100644 static/js/element-ui/lib/theme-chalk/message.css create mode 100644 static/js/element-ui/lib/theme-chalk/notification.css create mode 100644 static/js/element-ui/lib/theme-chalk/option-group.css create mode 100644 static/js/element-ui/lib/theme-chalk/option.css create mode 100644 static/js/element-ui/lib/theme-chalk/page-header.css create mode 100644 static/js/element-ui/lib/theme-chalk/pagination.css create mode 100644 static/js/element-ui/lib/theme-chalk/popconfirm.css create mode 100644 static/js/element-ui/lib/theme-chalk/popover.css create mode 100644 static/js/element-ui/lib/theme-chalk/popper.css create mode 100644 static/js/element-ui/lib/theme-chalk/progress.css create mode 100644 static/js/element-ui/lib/theme-chalk/radio-button.css create mode 100644 static/js/element-ui/lib/theme-chalk/radio-group.css create mode 100644 static/js/element-ui/lib/theme-chalk/radio.css create mode 100644 static/js/element-ui/lib/theme-chalk/rate.css create mode 100644 static/js/element-ui/lib/theme-chalk/reset.css create mode 100644 static/js/element-ui/lib/theme-chalk/row.css create mode 100644 static/js/element-ui/lib/theme-chalk/scrollbar.css create mode 100644 static/js/element-ui/lib/theme-chalk/select-dropdown.css create mode 100644 static/js/element-ui/lib/theme-chalk/select.css create mode 100644 static/js/element-ui/lib/theme-chalk/slider.css create mode 100644 static/js/element-ui/lib/theme-chalk/spinner.css create mode 100644 static/js/element-ui/lib/theme-chalk/step.css create mode 100644 static/js/element-ui/lib/theme-chalk/steps.css create mode 100644 static/js/element-ui/lib/theme-chalk/submenu.css create mode 100644 static/js/element-ui/lib/theme-chalk/switch.css create mode 100644 static/js/element-ui/lib/theme-chalk/tab-pane.css create mode 100644 static/js/element-ui/lib/theme-chalk/table-column.css create mode 100644 static/js/element-ui/lib/theme-chalk/table.css create mode 100644 static/js/element-ui/lib/theme-chalk/tabs.css create mode 100644 static/js/element-ui/lib/theme-chalk/tag.css create mode 100644 static/js/element-ui/lib/theme-chalk/time-picker.css create mode 100644 static/js/element-ui/lib/theme-chalk/time-select.css create mode 100644 static/js/element-ui/lib/theme-chalk/timeline-item.css create mode 100644 static/js/element-ui/lib/theme-chalk/timeline.css create mode 100644 static/js/element-ui/lib/theme-chalk/tooltip.css create mode 100644 static/js/element-ui/lib/theme-chalk/transfer.css create mode 100644 static/js/element-ui/lib/theme-chalk/tree.css create mode 100644 static/js/element-ui/lib/theme-chalk/upload.css create mode 100644 static/js/element-ui/lib/time-picker.js create mode 100644 static/js/element-ui/lib/time-select.js create mode 100644 static/js/element-ui/lib/timeline-item.js create mode 100644 static/js/element-ui/lib/timeline.js create mode 100644 static/js/element-ui/lib/tooltip.js create mode 100644 static/js/element-ui/lib/transfer.js create mode 100644 static/js/element-ui/lib/transitions/collapse-transition.js create mode 100644 static/js/element-ui/lib/tree.js create mode 100644 static/js/element-ui/lib/umd/locale/af-ZA.js create mode 100644 static/js/element-ui/lib/umd/locale/ar.js create mode 100644 static/js/element-ui/lib/umd/locale/bg.js create mode 100644 static/js/element-ui/lib/umd/locale/ca.js create mode 100644 static/js/element-ui/lib/umd/locale/cs-CZ.js create mode 100644 static/js/element-ui/lib/umd/locale/da.js create mode 100644 static/js/element-ui/lib/umd/locale/de.js create mode 100644 static/js/element-ui/lib/umd/locale/ee.js create mode 100644 static/js/element-ui/lib/umd/locale/el.js create mode 100644 static/js/element-ui/lib/umd/locale/en.js create mode 100644 static/js/element-ui/lib/umd/locale/eo.js create mode 100644 static/js/element-ui/lib/umd/locale/es.js create mode 100644 static/js/element-ui/lib/umd/locale/eu.js create mode 100644 static/js/element-ui/lib/umd/locale/fa.js create mode 100644 static/js/element-ui/lib/umd/locale/fi.js create mode 100644 static/js/element-ui/lib/umd/locale/fr.js create mode 100644 static/js/element-ui/lib/umd/locale/he.js create mode 100644 static/js/element-ui/lib/umd/locale/hr.js create mode 100644 static/js/element-ui/lib/umd/locale/hu.js create mode 100644 static/js/element-ui/lib/umd/locale/hy-AM.js create mode 100644 static/js/element-ui/lib/umd/locale/id.js create mode 100644 static/js/element-ui/lib/umd/locale/it.js create mode 100644 static/js/element-ui/lib/umd/locale/ja.js create mode 100644 static/js/element-ui/lib/umd/locale/kg.js create mode 100644 static/js/element-ui/lib/umd/locale/km.js create mode 100644 static/js/element-ui/lib/umd/locale/ko.js create mode 100644 static/js/element-ui/lib/umd/locale/ku.js create mode 100644 static/js/element-ui/lib/umd/locale/kz.js create mode 100644 static/js/element-ui/lib/umd/locale/lt.js create mode 100644 static/js/element-ui/lib/umd/locale/lv.js create mode 100644 static/js/element-ui/lib/umd/locale/mn.js create mode 100644 static/js/element-ui/lib/umd/locale/nb-NO.js create mode 100644 static/js/element-ui/lib/umd/locale/nl.js create mode 100644 static/js/element-ui/lib/umd/locale/pl.js create mode 100644 static/js/element-ui/lib/umd/locale/pt-br.js create mode 100644 static/js/element-ui/lib/umd/locale/pt.js create mode 100644 static/js/element-ui/lib/umd/locale/ro.js create mode 100644 static/js/element-ui/lib/umd/locale/ru-RU.js create mode 100644 static/js/element-ui/lib/umd/locale/sk.js create mode 100644 static/js/element-ui/lib/umd/locale/sl.js create mode 100644 static/js/element-ui/lib/umd/locale/sr.js create mode 100644 static/js/element-ui/lib/umd/locale/sv-SE.js create mode 100644 static/js/element-ui/lib/umd/locale/ta.js create mode 100644 static/js/element-ui/lib/umd/locale/th.js create mode 100644 static/js/element-ui/lib/umd/locale/tk.js create mode 100644 static/js/element-ui/lib/umd/locale/tr-TR.js create mode 100644 static/js/element-ui/lib/umd/locale/ua.js create mode 100644 static/js/element-ui/lib/umd/locale/ug-CN.js create mode 100644 static/js/element-ui/lib/umd/locale/uz-UZ.js create mode 100644 static/js/element-ui/lib/umd/locale/vi.js create mode 100644 static/js/element-ui/lib/umd/locale/zh-CN.js create mode 100644 static/js/element-ui/lib/umd/locale/zh-TW.js create mode 100644 static/js/element-ui/lib/upload.js create mode 100644 static/js/element-ui/lib/utils/after-leave.js create mode 100644 static/js/element-ui/lib/utils/aria-dialog.js create mode 100644 static/js/element-ui/lib/utils/aria-utils.js create mode 100644 static/js/element-ui/lib/utils/clickoutside.js create mode 100644 static/js/element-ui/lib/utils/date-util.js create mode 100644 static/js/element-ui/lib/utils/date.js create mode 100644 static/js/element-ui/lib/utils/dom.js create mode 100644 static/js/element-ui/lib/utils/menu/aria-menubar.js create mode 100644 static/js/element-ui/lib/utils/menu/aria-menuitem.js create mode 100644 static/js/element-ui/lib/utils/menu/aria-submenu.js create mode 100644 static/js/element-ui/lib/utils/merge.js create mode 100644 static/js/element-ui/lib/utils/popper.js create mode 100644 static/js/element-ui/lib/utils/popup/index.js create mode 100644 static/js/element-ui/lib/utils/popup/popup-manager.js create mode 100644 static/js/element-ui/lib/utils/resize-event.js create mode 100644 static/js/element-ui/lib/utils/scroll-into-view.js create mode 100644 static/js/element-ui/lib/utils/scrollbar-width.js create mode 100644 static/js/element-ui/lib/utils/shared.js create mode 100644 static/js/element-ui/lib/utils/types.js create mode 100644 static/js/element-ui/lib/utils/util.js create mode 100644 static/js/element-ui/lib/utils/vdom.js create mode 100644 static/js/element-ui/lib/utils/vue-popper.js create mode 100644 static/js/element-ui/package.json create mode 100644 static/js/form-create.min.js create mode 100644 static/js/iview.min.js create mode 100644 static/js/jquery-3.5.1.min.js create mode 100644 static/js/vue.min.js create mode 100644 static/tutorials_page.html diff --git a/README.md b/README.md index 0d193644..840e89a0 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,10 @@
`pyminer` 基于Python的开源、跨平台数据计算解决方案。
-PyMiner 是一款基于Python的开源、跨平台数据计算解决方案,通过加载各种插件实现不同的需求,用易于操作的形式,在统一的界面中,通过数据计算实现用户所设想的任务。 +PyMiner 是一款基于Python的开源、跨平台数据分析环境。它以方便Python初学者为己任,在Python的知识理论和工作实践之间搭建桥梁,竭诚为初学者服务。 +它大大减少了配置解释器环境的繁琐性,不仅提供了编程运行的功能,还能够以交互式的形式、进行常见的数据分析操作,减少代码编写和文档查阅的时间。 + +PyMiner通过加载各种插件实现不同的需求,开发者可以通过编写插件,将PyMiner扩展的更强大、更趁手,甚至用来创建一番自己的事业。

diff --git a/pmgwidgets/widgets/basic/tables/tableviews.py b/pmgwidgets/widgets/basic/tables/tableviews.py index 36c0720d..1abb5252 100644 --- a/pmgwidgets/widgets/basic/tables/tableviews.py +++ b/pmgwidgets/widgets/basic/tables/tableviews.py @@ -28,6 +28,7 @@ if typing.TYPE_CHECKING: logger = logging.getLogger(__name__) + class InputValueDialog(QDialog): UP = -1 DOWN = 1 @@ -586,17 +587,15 @@ class PMGTableViewer(QWidget): return False elif len(data.shape) == 3: self.slice_axis2.setMaximum(data.shape[0] - 1) - - # self.slice_axis2.setValue(0) self.on_high_dimensional_array(len(data.shape) == 3) - if self.table_view is not None: self.table_view.set_data(data) self.slice_input.setText(self.table_view.get_default_slicing_statement()) + if isinstance(data, np.ndarray): if len(data.shape) > 2: - self.on_axis2_value_changed() + self.on_axis2_value_changed() # 如果维度小于3,则默认进行以下切片操作。 return True def get_data(self): @@ -667,7 +666,6 @@ if __name__ == '__main__': table3.show() ret = table3.set_data(data) - if not ret: table.close() else: diff --git a/pmlocalserver/server.py b/pmlocalserver/server.py index 6a1af931..9d86addd 100644 --- a/pmlocalserver/server.py +++ b/pmlocalserver/server.py @@ -3,12 +3,11 @@ from flask import Flask from flask_cors import CORS import threading -server = Flask(__name__) +server = Flask(__name__, static_folder='static', static_url_path='/static') CORS(server, supports_credentials=True) # 解决跨域 server_thread = threading.Thread(target=server.run) # 这个线程与主界面没有任何交互,直接用系统内建的线程库即可,保证其安全性。 server_thread.setDaemon(True) - if __name__ == '__main__': server_thread.start() diff --git a/resources/qss/Fusion.qss b/resources/qss/Fusion.qss index 63dcd11f..82ceea9d 100644 --- a/resources/qss/Fusion.qss +++ b/resources/qss/Fusion.qss @@ -3,12 +3,16 @@ QWidget { font-family: "Microsoft YaHei"; /*font-family: "等线";*/ } -QDockWidget { + +/*QDockWidget { titlebar-close-icon: url(:/logo/source/icons/close.png); titlebar-normal-icon: url(:/logo/source/icons/float.png); } - +*/ +QDockWidget::title{ + background-color: #f0f0f0; +} QPushButton{ background-color: MAIN_THEME; diff --git a/resources/qss/standard.qss b/resources/qss/standard.qss index 257823c8..b2e7ad2a 100644 --- a/resources/qss/standard.qss +++ b/resources/qss/standard.qss @@ -10,48 +10,49 @@ QDialog{background-color:MAIN_THEME;} QAbstractScrollArea{ -border:1px solid MARGIN_THEME; + border:1px solid MARGIN_THEME; } TopToolBar { -border-bottom: 1px solid MARGIN_THEME; - border-top: 1px solid MARGIN_THEME; + border-bottom: 1px solid MARGIN_THEME; + border-top: 1px solid MARGIN_THEME; } TopToolBarRight { -border-bottom: 1px solid MARGIN_THEME; - border-top: 1px solid MARGIN_THEME; + border-bottom: 1px solid MARGIN_THEME; + border-top: 1px solid MARGIN_THEME; } QDockWidget { - border: 0px; - - } + border: 0px; +} QDockWidget::title { - border:0px 0px; - text-align: left; /* align the text to the left */ - background: lightgray; - padding-left: 5px; + border:0px 0px; + border-radius: 3px; + text-align: left; /* align the text to the left */ + background: lightgray; + padding-left: 5px; } QDockWidget::close-button, QDockWidget::float-button { - border: 1px solid transparent; - background: darkgray; - padding: 0px; + /* border: 1px solid transparent; + background: darkgray;*/ + border-radius: 3px; + /*padding: 0px;*/ } QDockWidget::close-button:hover, QDockWidget::float-button:hover { - background: gray; + background: gray; } QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { - padding: 1px -1px -1px 1px; + padding: 1px -1px -1px 1px; } QPushButton{ -border:1px solid MARGIN_THEME; -border-radius:5px; -height:20px; -width:80px; + border:1px solid MARGIN_THEME; + border-radius:5px; + height:20px; + width:80px; } QPushButton:hover{background-color:MARGIN_THEME;} /*按钮停留态*/ @@ -88,16 +89,16 @@ QPushButton:hover background-color:MARGIN_THEME; } QToolBar{ -height:100px; + height:100px; } QToolButton{ -border:1px; -padding:2px 2px; -text-align:left; -border-radius:5px; + border:1px; + padding:2px 2px; + text-align:left; + border-radius:5px; } /*按钮停留态*/ QToolButton:hover diff --git a/static/README.md b/static/README.md new file mode 100644 index 00000000..7b3676b8 --- /dev/null +++ b/static/README.md @@ -0,0 +1 @@ +static文件夹下是项目用到的Web资源文件,包含网页模板等。 \ No newline at end of file diff --git a/static/css/iview.min.css b/static/css/iview.min.css new file mode 100644 index 00000000..c43cca3f --- /dev/null +++ b/static/css/iview.min.css @@ -0,0 +1 @@ +.ivu-load-loop{-webkit-animation:ani-load-loop 1s linear infinite;animation:ani-load-loop 1s linear infinite}@-webkit-keyframes ani-load-loop{from{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ani-load-loop{from{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.input-group-error-append,.input-group-error-prepend{background-color:#fff;border:1px solid #ed4014}.input-group-error-append .ivu-select-selection,.input-group-error-prepend .ivu-select-selection{background-color:inherit;border:1px solid transparent}.input-group-error-prepend{border-right:0}.input-group-error-append{border-left:0}/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-size:12px;line-height:1.5;color:#515a6e;background-color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article,aside,blockquote,body,button,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,input,legend,li,menu,nav,ol,p,section,td,textarea,th,ul{margin:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}input::-ms-clear,input::-ms-reveal{display:none}a{color:#2d8cf0;background:0 0;text-decoration:none;outline:0;cursor:pointer;-webkit-transition:color .2s ease;transition:color .2s ease}a:hover{color:#57a3f3}a:active{color:#2b85e4}a:active,a:hover{outline:0;text-decoration:none}a[disabled]{color:#ccc;cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-family:Consolas,Menlo,Courier,monospace}@font-face{font-family:Ionicons;src:url(fonts/ionicons.woff2?v=3.0.0) format("woff2"),url(fonts/ionicons.woff?v=3.0.0) format("woff"),url(fonts/ionicons.ttf?v=3.0.0) format("truetype"),url(fonts/ionicons.svg?v=3.0.0#Ionicons) format("svg");font-weight:400;font-style:normal}.ivu-icon{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle}.ivu-icon-ios-add-circle-outline:before{content:"\f100"}.ivu-icon-ios-add-circle:before{content:"\f101"}.ivu-icon-ios-add:before{content:"\f102"}.ivu-icon-ios-alarm-outline:before{content:"\f103"}.ivu-icon-ios-alarm:before{content:"\f104"}.ivu-icon-ios-albums-outline:before{content:"\f105"}.ivu-icon-ios-albums:before{content:"\f106"}.ivu-icon-ios-alert-outline:before{content:"\f107"}.ivu-icon-ios-alert:before{content:"\f108"}.ivu-icon-ios-american-football-outline:before{content:"\f109"}.ivu-icon-ios-american-football:before{content:"\f10a"}.ivu-icon-ios-analytics-outline:before{content:"\f10b"}.ivu-icon-ios-analytics:before{content:"\f10c"}.ivu-icon-ios-aperture-outline:before{content:"\f10d"}.ivu-icon-ios-aperture:before{content:"\f10e"}.ivu-icon-ios-apps-outline:before{content:"\f10f"}.ivu-icon-ios-apps:before{content:"\f110"}.ivu-icon-ios-appstore-outline:before{content:"\f111"}.ivu-icon-ios-appstore:before{content:"\f112"}.ivu-icon-ios-archive-outline:before{content:"\f113"}.ivu-icon-ios-archive:before{content:"\f114"}.ivu-icon-ios-arrow-back:before{content:"\f115"}.ivu-icon-ios-arrow-down:before{content:"\f116"}.ivu-icon-ios-arrow-dropdown-circle:before{content:"\f117"}.ivu-icon-ios-arrow-dropdown:before{content:"\f118"}.ivu-icon-ios-arrow-dropleft-circle:before{content:"\f119"}.ivu-icon-ios-arrow-dropleft:before{content:"\f11a"}.ivu-icon-ios-arrow-dropright-circle:before{content:"\f11b"}.ivu-icon-ios-arrow-dropright:before{content:"\f11c"}.ivu-icon-ios-arrow-dropup-circle:before{content:"\f11d"}.ivu-icon-ios-arrow-dropup:before{content:"\f11e"}.ivu-icon-ios-arrow-forward:before{content:"\f11f"}.ivu-icon-ios-arrow-round-back:before{content:"\f120"}.ivu-icon-ios-arrow-round-down:before{content:"\f121"}.ivu-icon-ios-arrow-round-forward:before{content:"\f122"}.ivu-icon-ios-arrow-round-up:before{content:"\f123"}.ivu-icon-ios-arrow-up:before{content:"\f124"}.ivu-icon-ios-at-outline:before{content:"\f125"}.ivu-icon-ios-at:before{content:"\f126"}.ivu-icon-ios-attach:before{content:"\f127"}.ivu-icon-ios-backspace-outline:before{content:"\f128"}.ivu-icon-ios-backspace:before{content:"\f129"}.ivu-icon-ios-barcode-outline:before{content:"\f12a"}.ivu-icon-ios-barcode:before{content:"\f12b"}.ivu-icon-ios-baseball-outline:before{content:"\f12c"}.ivu-icon-ios-baseball:before{content:"\f12d"}.ivu-icon-ios-basket-outline:before{content:"\f12e"}.ivu-icon-ios-basket:before{content:"\f12f"}.ivu-icon-ios-basketball-outline:before{content:"\f130"}.ivu-icon-ios-basketball:before{content:"\f131"}.ivu-icon-ios-battery-charging:before{content:"\f132"}.ivu-icon-ios-battery-dead:before{content:"\f133"}.ivu-icon-ios-battery-full:before{content:"\f134"}.ivu-icon-ios-beaker-outline:before{content:"\f135"}.ivu-icon-ios-beaker:before{content:"\f136"}.ivu-icon-ios-beer-outline:before{content:"\f137"}.ivu-icon-ios-beer:before{content:"\f138"}.ivu-icon-ios-bicycle:before{content:"\f139"}.ivu-icon-ios-bluetooth:before{content:"\f13a"}.ivu-icon-ios-boat-outline:before{content:"\f13b"}.ivu-icon-ios-boat:before{content:"\f13c"}.ivu-icon-ios-body-outline:before{content:"\f13d"}.ivu-icon-ios-body:before{content:"\f13e"}.ivu-icon-ios-bonfire-outline:before{content:"\f13f"}.ivu-icon-ios-bonfire:before{content:"\f140"}.ivu-icon-ios-book-outline:before{content:"\f141"}.ivu-icon-ios-book:before{content:"\f142"}.ivu-icon-ios-bookmark-outline:before{content:"\f143"}.ivu-icon-ios-bookmark:before{content:"\f144"}.ivu-icon-ios-bookmarks-outline:before{content:"\f145"}.ivu-icon-ios-bookmarks:before{content:"\f146"}.ivu-icon-ios-bowtie-outline:before{content:"\f147"}.ivu-icon-ios-bowtie:before{content:"\f148"}.ivu-icon-ios-briefcase-outline:before{content:"\f149"}.ivu-icon-ios-briefcase:before{content:"\f14a"}.ivu-icon-ios-browsers-outline:before{content:"\f14b"}.ivu-icon-ios-browsers:before{content:"\f14c"}.ivu-icon-ios-brush-outline:before{content:"\f14d"}.ivu-icon-ios-brush:before{content:"\f14e"}.ivu-icon-ios-bug-outline:before{content:"\f14f"}.ivu-icon-ios-bug:before{content:"\f150"}.ivu-icon-ios-build-outline:before{content:"\f151"}.ivu-icon-ios-build:before{content:"\f152"}.ivu-icon-ios-bulb-outline:before{content:"\f153"}.ivu-icon-ios-bulb:before{content:"\f154"}.ivu-icon-ios-bus-outline:before{content:"\f155"}.ivu-icon-ios-bus:before{content:"\f156"}.ivu-icon-ios-cafe-outline:before{content:"\f157"}.ivu-icon-ios-cafe:before{content:"\f158"}.ivu-icon-ios-calculator-outline:before{content:"\f159"}.ivu-icon-ios-calculator:before{content:"\f15a"}.ivu-icon-ios-calendar-outline:before{content:"\f15b"}.ivu-icon-ios-calendar:before{content:"\f15c"}.ivu-icon-ios-call-outline:before{content:"\f15d"}.ivu-icon-ios-call:before{content:"\f15e"}.ivu-icon-ios-camera-outline:before{content:"\f15f"}.ivu-icon-ios-camera:before{content:"\f160"}.ivu-icon-ios-car-outline:before{content:"\f161"}.ivu-icon-ios-car:before{content:"\f162"}.ivu-icon-ios-card-outline:before{content:"\f163"}.ivu-icon-ios-card:before{content:"\f164"}.ivu-icon-ios-cart-outline:before{content:"\f165"}.ivu-icon-ios-cart:before{content:"\f166"}.ivu-icon-ios-cash-outline:before{content:"\f167"}.ivu-icon-ios-cash:before{content:"\f168"}.ivu-icon-ios-chatboxes-outline:before{content:"\f169"}.ivu-icon-ios-chatboxes:before{content:"\f16a"}.ivu-icon-ios-chatbubbles-outline:before{content:"\f16b"}.ivu-icon-ios-chatbubbles:before{content:"\f16c"}.ivu-icon-ios-checkbox-outline:before{content:"\f16d"}.ivu-icon-ios-checkbox:before{content:"\f16e"}.ivu-icon-ios-checkmark-circle-outline:before{content:"\f16f"}.ivu-icon-ios-checkmark-circle:before{content:"\f170"}.ivu-icon-ios-checkmark:before{content:"\f171"}.ivu-icon-ios-clipboard-outline:before{content:"\f172"}.ivu-icon-ios-clipboard:before{content:"\f173"}.ivu-icon-ios-clock-outline:before{content:"\f174"}.ivu-icon-ios-clock:before{content:"\f175"}.ivu-icon-ios-close-circle-outline:before{content:"\f176"}.ivu-icon-ios-close-circle:before{content:"\f177"}.ivu-icon-ios-close:before{content:"\f178"}.ivu-icon-ios-closed-captioning-outline:before{content:"\f179"}.ivu-icon-ios-closed-captioning:before{content:"\f17a"}.ivu-icon-ios-cloud-circle-outline:before{content:"\f17b"}.ivu-icon-ios-cloud-circle:before{content:"\f17c"}.ivu-icon-ios-cloud-done-outline:before{content:"\f17d"}.ivu-icon-ios-cloud-done:before{content:"\f17e"}.ivu-icon-ios-cloud-download-outline:before{content:"\f17f"}.ivu-icon-ios-cloud-download:before{content:"\f180"}.ivu-icon-ios-cloud-outline:before{content:"\f181"}.ivu-icon-ios-cloud-upload-outline:before{content:"\f182"}.ivu-icon-ios-cloud-upload:before{content:"\f183"}.ivu-icon-ios-cloud:before{content:"\f184"}.ivu-icon-ios-cloudy-night-outline:before{content:"\f185"}.ivu-icon-ios-cloudy-night:before{content:"\f186"}.ivu-icon-ios-cloudy-outline:before{content:"\f187"}.ivu-icon-ios-cloudy:before{content:"\f188"}.ivu-icon-ios-code-download:before{content:"\f189"}.ivu-icon-ios-code-working:before{content:"\f18a"}.ivu-icon-ios-code:before{content:"\f18b"}.ivu-icon-ios-cog-outline:before{content:"\f18c"}.ivu-icon-ios-cog:before{content:"\f18d"}.ivu-icon-ios-color-fill-outline:before{content:"\f18e"}.ivu-icon-ios-color-fill:before{content:"\f18f"}.ivu-icon-ios-color-filter-outline:before{content:"\f190"}.ivu-icon-ios-color-filter:before{content:"\f191"}.ivu-icon-ios-color-palette-outline:before{content:"\f192"}.ivu-icon-ios-color-palette:before{content:"\f193"}.ivu-icon-ios-color-wand-outline:before{content:"\f194"}.ivu-icon-ios-color-wand:before{content:"\f195"}.ivu-icon-ios-compass-outline:before{content:"\f196"}.ivu-icon-ios-compass:before{content:"\f197"}.ivu-icon-ios-construct-outline:before{content:"\f198"}.ivu-icon-ios-construct:before{content:"\f199"}.ivu-icon-ios-contact-outline:before{content:"\f19a"}.ivu-icon-ios-contact:before{content:"\f19b"}.ivu-icon-ios-contacts-outline:before{content:"\f19c"}.ivu-icon-ios-contacts:before{content:"\f19d"}.ivu-icon-ios-contract:before{content:"\f19e"}.ivu-icon-ios-contrast:before{content:"\f19f"}.ivu-icon-ios-copy-outline:before{content:"\f1a0"}.ivu-icon-ios-copy:before{content:"\f1a1"}.ivu-icon-ios-create-outline:before{content:"\f1a2"}.ivu-icon-ios-create:before{content:"\f1a3"}.ivu-icon-ios-crop-outline:before{content:"\f1a4"}.ivu-icon-ios-crop:before{content:"\f1a5"}.ivu-icon-ios-cube-outline:before{content:"\f1a6"}.ivu-icon-ios-cube:before{content:"\f1a7"}.ivu-icon-ios-cut-outline:before{content:"\f1a8"}.ivu-icon-ios-cut:before{content:"\f1a9"}.ivu-icon-ios-desktop-outline:before{content:"\f1aa"}.ivu-icon-ios-desktop:before{content:"\f1ab"}.ivu-icon-ios-disc-outline:before{content:"\f1ac"}.ivu-icon-ios-disc:before{content:"\f1ad"}.ivu-icon-ios-document-outline:before{content:"\f1ae"}.ivu-icon-ios-document:before{content:"\f1af"}.ivu-icon-ios-done-all:before{content:"\f1b0"}.ivu-icon-ios-download-outline:before{content:"\f1b1"}.ivu-icon-ios-download:before{content:"\f1b2"}.ivu-icon-ios-easel-outline:before{content:"\f1b3"}.ivu-icon-ios-easel:before{content:"\f1b4"}.ivu-icon-ios-egg-outline:before{content:"\f1b5"}.ivu-icon-ios-egg:before{content:"\f1b6"}.ivu-icon-ios-exit-outline:before{content:"\f1b7"}.ivu-icon-ios-exit:before{content:"\f1b8"}.ivu-icon-ios-expand:before{content:"\f1b9"}.ivu-icon-ios-eye-off-outline:before{content:"\f1ba"}.ivu-icon-ios-eye-off:before{content:"\f1bb"}.ivu-icon-ios-eye-outline:before{content:"\f1bc"}.ivu-icon-ios-eye:before{content:"\f1bd"}.ivu-icon-ios-fastforward-outline:before{content:"\f1be"}.ivu-icon-ios-fastforward:before{content:"\f1bf"}.ivu-icon-ios-female:before{content:"\f1c0"}.ivu-icon-ios-filing-outline:before{content:"\f1c1"}.ivu-icon-ios-filing:before{content:"\f1c2"}.ivu-icon-ios-film-outline:before{content:"\f1c3"}.ivu-icon-ios-film:before{content:"\f1c4"}.ivu-icon-ios-finger-print:before{content:"\f1c5"}.ivu-icon-ios-flag-outline:before{content:"\f1c6"}.ivu-icon-ios-flag:before{content:"\f1c7"}.ivu-icon-ios-flame-outline:before{content:"\f1c8"}.ivu-icon-ios-flame:before{content:"\f1c9"}.ivu-icon-ios-flash-outline:before{content:"\f1ca"}.ivu-icon-ios-flash:before{content:"\f1cb"}.ivu-icon-ios-flask-outline:before{content:"\f1cc"}.ivu-icon-ios-flask:before{content:"\f1cd"}.ivu-icon-ios-flower-outline:before{content:"\f1ce"}.ivu-icon-ios-flower:before{content:"\f1cf"}.ivu-icon-ios-folder-open-outline:before{content:"\f1d0"}.ivu-icon-ios-folder-open:before{content:"\f1d1"}.ivu-icon-ios-folder-outline:before{content:"\f1d2"}.ivu-icon-ios-folder:before{content:"\f1d3"}.ivu-icon-ios-football-outline:before{content:"\f1d4"}.ivu-icon-ios-football:before{content:"\f1d5"}.ivu-icon-ios-funnel-outline:before{content:"\f1d6"}.ivu-icon-ios-funnel:before{content:"\f1d7"}.ivu-icon-ios-game-controller-a-outline:before{content:"\f1d8"}.ivu-icon-ios-game-controller-a:before{content:"\f1d9"}.ivu-icon-ios-game-controller-b-outline:before{content:"\f1da"}.ivu-icon-ios-game-controller-b:before{content:"\f1db"}.ivu-icon-ios-git-branch:before{content:"\f1dc"}.ivu-icon-ios-git-commit:before{content:"\f1dd"}.ivu-icon-ios-git-compare:before{content:"\f1de"}.ivu-icon-ios-git-merge:before{content:"\f1df"}.ivu-icon-ios-git-network:before{content:"\f1e0"}.ivu-icon-ios-git-pull-request:before{content:"\f1e1"}.ivu-icon-ios-glasses-outline:before{content:"\f1e2"}.ivu-icon-ios-glasses:before{content:"\f1e3"}.ivu-icon-ios-globe-outline:before{content:"\f1e4"}.ivu-icon-ios-globe:before{content:"\f1e5"}.ivu-icon-ios-grid-outline:before{content:"\f1e6"}.ivu-icon-ios-grid:before{content:"\f1e7"}.ivu-icon-ios-hammer-outline:before{content:"\f1e8"}.ivu-icon-ios-hammer:before{content:"\f1e9"}.ivu-icon-ios-hand-outline:before{content:"\f1ea"}.ivu-icon-ios-hand:before{content:"\f1eb"}.ivu-icon-ios-happy-outline:before{content:"\f1ec"}.ivu-icon-ios-happy:before{content:"\f1ed"}.ivu-icon-ios-headset-outline:before{content:"\f1ee"}.ivu-icon-ios-headset:before{content:"\f1ef"}.ivu-icon-ios-heart-outline:before{content:"\f1f0"}.ivu-icon-ios-heart:before{content:"\f1f1"}.ivu-icon-ios-help-buoy-outline:before{content:"\f1f2"}.ivu-icon-ios-help-buoy:before{content:"\f1f3"}.ivu-icon-ios-help-circle-outline:before{content:"\f1f4"}.ivu-icon-ios-help-circle:before{content:"\f1f5"}.ivu-icon-ios-help:before{content:"\f1f6"}.ivu-icon-ios-home-outline:before{content:"\f1f7"}.ivu-icon-ios-home:before{content:"\f1f8"}.ivu-icon-ios-ice-cream-outline:before{content:"\f1f9"}.ivu-icon-ios-ice-cream:before{content:"\f1fa"}.ivu-icon-ios-image-outline:before{content:"\f1fb"}.ivu-icon-ios-image:before{content:"\f1fc"}.ivu-icon-ios-images-outline:before{content:"\f1fd"}.ivu-icon-ios-images:before{content:"\f1fe"}.ivu-icon-ios-infinite-outline:before{content:"\f1ff"}.ivu-icon-ios-infinite:before{content:"\f200"}.ivu-icon-ios-information-circle-outline:before{content:"\f201"}.ivu-icon-ios-information-circle:before{content:"\f202"}.ivu-icon-ios-information:before{content:"\f203"}.ivu-icon-ios-ionic-outline:before{content:"\f204"}.ivu-icon-ios-ionic:before{content:"\f205"}.ivu-icon-ios-ionitron-outline:before{content:"\f206"}.ivu-icon-ios-ionitron:before{content:"\f207"}.ivu-icon-ios-jet-outline:before{content:"\f208"}.ivu-icon-ios-jet:before{content:"\f209"}.ivu-icon-ios-key-outline:before{content:"\f20a"}.ivu-icon-ios-key:before{content:"\f20b"}.ivu-icon-ios-keypad-outline:before{content:"\f20c"}.ivu-icon-ios-keypad:before{content:"\f20d"}.ivu-icon-ios-laptop:before{content:"\f20e"}.ivu-icon-ios-leaf-outline:before{content:"\f20f"}.ivu-icon-ios-leaf:before{content:"\f210"}.ivu-icon-ios-link-outline:before{content:"\f211"}.ivu-icon-ios-link:before{content:"\f212"}.ivu-icon-ios-list-box-outline:before{content:"\f213"}.ivu-icon-ios-list-box:before{content:"\f214"}.ivu-icon-ios-list:before{content:"\f215"}.ivu-icon-ios-locate-outline:before{content:"\f216"}.ivu-icon-ios-locate:before{content:"\f217"}.ivu-icon-ios-lock-outline:before{content:"\f218"}.ivu-icon-ios-lock:before{content:"\f219"}.ivu-icon-ios-log-in:before{content:"\f21a"}.ivu-icon-ios-log-out:before{content:"\f21b"}.ivu-icon-ios-magnet-outline:before{content:"\f21c"}.ivu-icon-ios-magnet:before{content:"\f21d"}.ivu-icon-ios-mail-open-outline:before{content:"\f21e"}.ivu-icon-ios-mail-open:before{content:"\f21f"}.ivu-icon-ios-mail-outline:before{content:"\f220"}.ivu-icon-ios-mail:before{content:"\f221"}.ivu-icon-ios-male:before{content:"\f222"}.ivu-icon-ios-man-outline:before{content:"\f223"}.ivu-icon-ios-man:before{content:"\f224"}.ivu-icon-ios-map-outline:before{content:"\f225"}.ivu-icon-ios-map:before{content:"\f226"}.ivu-icon-ios-medal-outline:before{content:"\f227"}.ivu-icon-ios-medal:before{content:"\f228"}.ivu-icon-ios-medical-outline:before{content:"\f229"}.ivu-icon-ios-medical:before{content:"\f22a"}.ivu-icon-ios-medkit-outline:before{content:"\f22b"}.ivu-icon-ios-medkit:before{content:"\f22c"}.ivu-icon-ios-megaphone-outline:before{content:"\f22d"}.ivu-icon-ios-megaphone:before{content:"\f22e"}.ivu-icon-ios-menu-outline:before{content:"\f22f"}.ivu-icon-ios-menu:before{content:"\f230"}.ivu-icon-ios-mic-off-outline:before{content:"\f231"}.ivu-icon-ios-mic-off:before{content:"\f232"}.ivu-icon-ios-mic-outline:before{content:"\f233"}.ivu-icon-ios-mic:before{content:"\f234"}.ivu-icon-ios-microphone-outline:before{content:"\f235"}.ivu-icon-ios-microphone:before{content:"\f236"}.ivu-icon-ios-moon-outline:before{content:"\f237"}.ivu-icon-ios-moon:before{content:"\f238"}.ivu-icon-ios-more-outline:before{content:"\f239"}.ivu-icon-ios-more:before{content:"\f23a"}.ivu-icon-ios-move:before{content:"\f23b"}.ivu-icon-ios-musical-note-outline:before{content:"\f23c"}.ivu-icon-ios-musical-note:before{content:"\f23d"}.ivu-icon-ios-musical-notes-outline:before{content:"\f23e"}.ivu-icon-ios-musical-notes:before{content:"\f23f"}.ivu-icon-ios-navigate-outline:before{content:"\f240"}.ivu-icon-ios-navigate:before{content:"\f241"}.ivu-icon-ios-no-smoking-outline:before{content:"\f242"}.ivu-icon-ios-no-smoking:before{content:"\f243"}.ivu-icon-ios-notifications-off-outline:before{content:"\f244"}.ivu-icon-ios-notifications-off:before{content:"\f245"}.ivu-icon-ios-notifications-outline:before{content:"\f246"}.ivu-icon-ios-notifications:before{content:"\f247"}.ivu-icon-ios-nuclear-outline:before{content:"\f248"}.ivu-icon-ios-nuclear:before{content:"\f249"}.ivu-icon-ios-nutrition-outline:before{content:"\f24a"}.ivu-icon-ios-nutrition:before{content:"\f24b"}.ivu-icon-ios-open-outline:before{content:"\f24c"}.ivu-icon-ios-open:before{content:"\f24d"}.ivu-icon-ios-options-outline:before{content:"\f24e"}.ivu-icon-ios-options:before{content:"\f24f"}.ivu-icon-ios-outlet-outline:before{content:"\f250"}.ivu-icon-ios-outlet:before{content:"\f251"}.ivu-icon-ios-paper-outline:before{content:"\f252"}.ivu-icon-ios-paper-plane-outline:before{content:"\f253"}.ivu-icon-ios-paper-plane:before{content:"\f254"}.ivu-icon-ios-paper:before{content:"\f255"}.ivu-icon-ios-partly-sunny-outline:before{content:"\f256"}.ivu-icon-ios-partly-sunny:before{content:"\f257"}.ivu-icon-ios-pause-outline:before{content:"\f258"}.ivu-icon-ios-pause:before{content:"\f259"}.ivu-icon-ios-paw-outline:before{content:"\f25a"}.ivu-icon-ios-paw:before{content:"\f25b"}.ivu-icon-ios-people-outline:before{content:"\f25c"}.ivu-icon-ios-people:before{content:"\f25d"}.ivu-icon-ios-person-add-outline:before{content:"\f25e"}.ivu-icon-ios-person-add:before{content:"\f25f"}.ivu-icon-ios-person-outline:before{content:"\f260"}.ivu-icon-ios-person:before{content:"\f261"}.ivu-icon-ios-phone-landscape:before{content:"\f262"}.ivu-icon-ios-phone-portrait:before{content:"\f263"}.ivu-icon-ios-photos-outline:before{content:"\f264"}.ivu-icon-ios-photos:before{content:"\f265"}.ivu-icon-ios-pie-outline:before{content:"\f266"}.ivu-icon-ios-pie:before{content:"\f267"}.ivu-icon-ios-pin-outline:before{content:"\f268"}.ivu-icon-ios-pin:before{content:"\f269"}.ivu-icon-ios-pint-outline:before{content:"\f26a"}.ivu-icon-ios-pint:before{content:"\f26b"}.ivu-icon-ios-pizza-outline:before{content:"\f26c"}.ivu-icon-ios-pizza:before{content:"\f26d"}.ivu-icon-ios-plane-outline:before{content:"\f26e"}.ivu-icon-ios-plane:before{content:"\f26f"}.ivu-icon-ios-planet-outline:before{content:"\f270"}.ivu-icon-ios-planet:before{content:"\f271"}.ivu-icon-ios-play-outline:before{content:"\f272"}.ivu-icon-ios-play:before{content:"\f273"}.ivu-icon-ios-podium-outline:before{content:"\f274"}.ivu-icon-ios-podium:before{content:"\f275"}.ivu-icon-ios-power-outline:before{content:"\f276"}.ivu-icon-ios-power:before{content:"\f277"}.ivu-icon-ios-pricetag-outline:before{content:"\f278"}.ivu-icon-ios-pricetag:before{content:"\f279"}.ivu-icon-ios-pricetags-outline:before{content:"\f27a"}.ivu-icon-ios-pricetags:before{content:"\f27b"}.ivu-icon-ios-print-outline:before{content:"\f27c"}.ivu-icon-ios-print:before{content:"\f27d"}.ivu-icon-ios-pulse-outline:before{content:"\f27e"}.ivu-icon-ios-pulse:before{content:"\f27f"}.ivu-icon-ios-qr-scanner:before{content:"\f280"}.ivu-icon-ios-quote-outline:before{content:"\f281"}.ivu-icon-ios-quote:before{content:"\f282"}.ivu-icon-ios-radio-button-off:before{content:"\f283"}.ivu-icon-ios-radio-button-on:before{content:"\f284"}.ivu-icon-ios-radio-outline:before{content:"\f285"}.ivu-icon-ios-radio:before{content:"\f286"}.ivu-icon-ios-rainy-outline:before{content:"\f287"}.ivu-icon-ios-rainy:before{content:"\f288"}.ivu-icon-ios-recording-outline:before{content:"\f289"}.ivu-icon-ios-recording:before{content:"\f28a"}.ivu-icon-ios-redo-outline:before{content:"\f28b"}.ivu-icon-ios-redo:before{content:"\f28c"}.ivu-icon-ios-refresh-circle-outline:before{content:"\f28d"}.ivu-icon-ios-refresh-circle:before{content:"\f28e"}.ivu-icon-ios-refresh:before{content:"\f28f"}.ivu-icon-ios-remove-circle-outline:before{content:"\f290"}.ivu-icon-ios-remove-circle:before{content:"\f291"}.ivu-icon-ios-remove:before{content:"\f292"}.ivu-icon-ios-reorder:before{content:"\f293"}.ivu-icon-ios-repeat:before{content:"\f294"}.ivu-icon-ios-resize:before{content:"\f295"}.ivu-icon-ios-restaurant-outline:before{content:"\f296"}.ivu-icon-ios-restaurant:before{content:"\f297"}.ivu-icon-ios-return-left:before{content:"\f298"}.ivu-icon-ios-return-right:before{content:"\f299"}.ivu-icon-ios-reverse-camera-outline:before{content:"\f29a"}.ivu-icon-ios-reverse-camera:before{content:"\f29b"}.ivu-icon-ios-rewind-outline:before{content:"\f29c"}.ivu-icon-ios-rewind:before{content:"\f29d"}.ivu-icon-ios-ribbon-outline:before{content:"\f29e"}.ivu-icon-ios-ribbon:before{content:"\f29f"}.ivu-icon-ios-rose-outline:before{content:"\f2a0"}.ivu-icon-ios-rose:before{content:"\f2a1"}.ivu-icon-ios-sad-outline:before{content:"\f2a2"}.ivu-icon-ios-sad:before{content:"\f2a3"}.ivu-icon-ios-school-outline:before{content:"\f2a4"}.ivu-icon-ios-school:before{content:"\f2a5"}.ivu-icon-ios-search-outline:before{content:"\f2a6"}.ivu-icon-ios-search:before{content:"\f2a7"}.ivu-icon-ios-send-outline:before{content:"\f2a8"}.ivu-icon-ios-send:before{content:"\f2a9"}.ivu-icon-ios-settings-outline:before{content:"\f2aa"}.ivu-icon-ios-settings:before{content:"\f2ab"}.ivu-icon-ios-share-alt-outline:before{content:"\f2ac"}.ivu-icon-ios-share-alt:before{content:"\f2ad"}.ivu-icon-ios-share-outline:before{content:"\f2ae"}.ivu-icon-ios-share:before{content:"\f2af"}.ivu-icon-ios-shirt-outline:before{content:"\f2b0"}.ivu-icon-ios-shirt:before{content:"\f2b1"}.ivu-icon-ios-shuffle:before{content:"\f2b2"}.ivu-icon-ios-skip-backward-outline:before{content:"\f2b3"}.ivu-icon-ios-skip-backward:before{content:"\f2b4"}.ivu-icon-ios-skip-forward-outline:before{content:"\f2b5"}.ivu-icon-ios-skip-forward:before{content:"\f2b6"}.ivu-icon-ios-snow-outline:before{content:"\f2b7"}.ivu-icon-ios-snow:before{content:"\f2b8"}.ivu-icon-ios-speedometer-outline:before{content:"\f2b9"}.ivu-icon-ios-speedometer:before{content:"\f2ba"}.ivu-icon-ios-square-outline:before{content:"\f2bb"}.ivu-icon-ios-square:before{content:"\f2bc"}.ivu-icon-ios-star-half:before{content:"\f2bd"}.ivu-icon-ios-star-outline:before{content:"\f2be"}.ivu-icon-ios-star:before{content:"\f2bf"}.ivu-icon-ios-stats-outline:before{content:"\f2c0"}.ivu-icon-ios-stats:before{content:"\f2c1"}.ivu-icon-ios-stopwatch-outline:before{content:"\f2c2"}.ivu-icon-ios-stopwatch:before{content:"\f2c3"}.ivu-icon-ios-subway-outline:before{content:"\f2c4"}.ivu-icon-ios-subway:before{content:"\f2c5"}.ivu-icon-ios-sunny-outline:before{content:"\f2c6"}.ivu-icon-ios-sunny:before{content:"\f2c7"}.ivu-icon-ios-swap:before{content:"\f2c8"}.ivu-icon-ios-switch-outline:before{content:"\f2c9"}.ivu-icon-ios-switch:before{content:"\f2ca"}.ivu-icon-ios-sync:before{content:"\f2cb"}.ivu-icon-ios-tablet-landscape:before{content:"\f2cc"}.ivu-icon-ios-tablet-portrait:before{content:"\f2cd"}.ivu-icon-ios-tennisball-outline:before{content:"\f2ce"}.ivu-icon-ios-tennisball:before{content:"\f2cf"}.ivu-icon-ios-text-outline:before{content:"\f2d0"}.ivu-icon-ios-text:before{content:"\f2d1"}.ivu-icon-ios-thermometer-outline:before{content:"\f2d2"}.ivu-icon-ios-thermometer:before{content:"\f2d3"}.ivu-icon-ios-thumbs-down-outline:before{content:"\f2d4"}.ivu-icon-ios-thumbs-down:before{content:"\f2d5"}.ivu-icon-ios-thumbs-up-outline:before{content:"\f2d6"}.ivu-icon-ios-thumbs-up:before{content:"\f2d7"}.ivu-icon-ios-thunderstorm-outline:before{content:"\f2d8"}.ivu-icon-ios-thunderstorm:before{content:"\f2d9"}.ivu-icon-ios-time-outline:before{content:"\f2da"}.ivu-icon-ios-time:before{content:"\f2db"}.ivu-icon-ios-timer-outline:before{content:"\f2dc"}.ivu-icon-ios-timer:before{content:"\f2dd"}.ivu-icon-ios-train-outline:before{content:"\f2de"}.ivu-icon-ios-train:before{content:"\f2df"}.ivu-icon-ios-transgender:before{content:"\f2e0"}.ivu-icon-ios-trash-outline:before{content:"\f2e1"}.ivu-icon-ios-trash:before{content:"\f2e2"}.ivu-icon-ios-trending-down:before{content:"\f2e3"}.ivu-icon-ios-trending-up:before{content:"\f2e4"}.ivu-icon-ios-trophy-outline:before{content:"\f2e5"}.ivu-icon-ios-trophy:before{content:"\f2e6"}.ivu-icon-ios-umbrella-outline:before{content:"\f2e7"}.ivu-icon-ios-umbrella:before{content:"\f2e8"}.ivu-icon-ios-undo-outline:before{content:"\f2e9"}.ivu-icon-ios-undo:before{content:"\f2ea"}.ivu-icon-ios-unlock-outline:before{content:"\f2eb"}.ivu-icon-ios-unlock:before{content:"\f2ec"}.ivu-icon-ios-videocam-outline:before{content:"\f2ed"}.ivu-icon-ios-videocam:before{content:"\f2ee"}.ivu-icon-ios-volume-down:before{content:"\f2ef"}.ivu-icon-ios-volume-mute:before{content:"\f2f0"}.ivu-icon-ios-volume-off:before{content:"\f2f1"}.ivu-icon-ios-volume-up:before{content:"\f2f2"}.ivu-icon-ios-walk:before{content:"\f2f3"}.ivu-icon-ios-warning-outline:before{content:"\f2f4"}.ivu-icon-ios-warning:before{content:"\f2f5"}.ivu-icon-ios-watch:before{content:"\f2f6"}.ivu-icon-ios-water-outline:before{content:"\f2f7"}.ivu-icon-ios-water:before{content:"\f2f8"}.ivu-icon-ios-wifi-outline:before{content:"\f2f9"}.ivu-icon-ios-wifi:before{content:"\f2fa"}.ivu-icon-ios-wine-outline:before{content:"\f2fb"}.ivu-icon-ios-wine:before{content:"\f2fc"}.ivu-icon-ios-woman-outline:before{content:"\f2fd"}.ivu-icon-ios-woman:before{content:"\f2fe"}.ivu-icon-logo-android:before{content:"\f2ff"}.ivu-icon-logo-angular:before{content:"\f300"}.ivu-icon-logo-apple:before{content:"\f301"}.ivu-icon-logo-bitcoin:before{content:"\f302"}.ivu-icon-logo-buffer:before{content:"\f303"}.ivu-icon-logo-chrome:before{content:"\f304"}.ivu-icon-logo-codepen:before{content:"\f305"}.ivu-icon-logo-css3:before{content:"\f306"}.ivu-icon-logo-designernews:before{content:"\f307"}.ivu-icon-logo-dribbble:before{content:"\f308"}.ivu-icon-logo-dropbox:before{content:"\f309"}.ivu-icon-logo-euro:before{content:"\f30a"}.ivu-icon-logo-facebook:before{content:"\f30b"}.ivu-icon-logo-foursquare:before{content:"\f30c"}.ivu-icon-logo-freebsd-devil:before{content:"\f30d"}.ivu-icon-logo-github:before{content:"\f30e"}.ivu-icon-logo-google:before{content:"\f30f"}.ivu-icon-logo-googleplus:before{content:"\f310"}.ivu-icon-logo-hackernews:before{content:"\f311"}.ivu-icon-logo-html5:before{content:"\f312"}.ivu-icon-logo-instagram:before{content:"\f313"}.ivu-icon-logo-javascript:before{content:"\f314"}.ivu-icon-logo-linkedin:before{content:"\f315"}.ivu-icon-logo-markdown:before{content:"\f316"}.ivu-icon-logo-nodejs:before{content:"\f317"}.ivu-icon-logo-octocat:before{content:"\f318"}.ivu-icon-logo-pinterest:before{content:"\f319"}.ivu-icon-logo-playstation:before{content:"\f31a"}.ivu-icon-logo-python:before{content:"\f31b"}.ivu-icon-logo-reddit:before{content:"\f31c"}.ivu-icon-logo-rss:before{content:"\f31d"}.ivu-icon-logo-sass:before{content:"\f31e"}.ivu-icon-logo-skype:before{content:"\f31f"}.ivu-icon-logo-snapchat:before{content:"\f320"}.ivu-icon-logo-steam:before{content:"\f321"}.ivu-icon-logo-tumblr:before{content:"\f322"}.ivu-icon-logo-tux:before{content:"\f323"}.ivu-icon-logo-twitch:before{content:"\f324"}.ivu-icon-logo-twitter:before{content:"\f325"}.ivu-icon-logo-usd:before{content:"\f326"}.ivu-icon-logo-vimeo:before{content:"\f327"}.ivu-icon-logo-whatsapp:before{content:"\f328"}.ivu-icon-logo-windows:before{content:"\f329"}.ivu-icon-logo-wordpress:before{content:"\f32a"}.ivu-icon-logo-xbox:before{content:"\f32b"}.ivu-icon-logo-yahoo:before{content:"\f32c"}.ivu-icon-logo-yen:before{content:"\f32d"}.ivu-icon-logo-youtube:before{content:"\f32e"}.ivu-icon-md-add-circle:before{content:"\f32f"}.ivu-icon-md-add:before{content:"\f330"}.ivu-icon-md-alarm:before{content:"\f331"}.ivu-icon-md-albums:before{content:"\f332"}.ivu-icon-md-alert:before{content:"\f333"}.ivu-icon-md-american-football:before{content:"\f334"}.ivu-icon-md-analytics:before{content:"\f335"}.ivu-icon-md-aperture:before{content:"\f336"}.ivu-icon-md-apps:before{content:"\f337"}.ivu-icon-md-appstore:before{content:"\f338"}.ivu-icon-md-archive:before{content:"\f339"}.ivu-icon-md-arrow-back:before{content:"\f33a"}.ivu-icon-md-arrow-down:before{content:"\f33b"}.ivu-icon-md-arrow-dropdown-circle:before{content:"\f33c"}.ivu-icon-md-arrow-dropdown:before{content:"\f33d"}.ivu-icon-md-arrow-dropleft-circle:before{content:"\f33e"}.ivu-icon-md-arrow-dropleft:before{content:"\f33f"}.ivu-icon-md-arrow-dropright-circle:before{content:"\f340"}.ivu-icon-md-arrow-dropright:before{content:"\f341"}.ivu-icon-md-arrow-dropup-circle:before{content:"\f342"}.ivu-icon-md-arrow-dropup:before{content:"\f343"}.ivu-icon-md-arrow-forward:before{content:"\f344"}.ivu-icon-md-arrow-round-back:before{content:"\f345"}.ivu-icon-md-arrow-round-down:before{content:"\f346"}.ivu-icon-md-arrow-round-forward:before{content:"\f347"}.ivu-icon-md-arrow-round-up:before{content:"\f348"}.ivu-icon-md-arrow-up:before{content:"\f349"}.ivu-icon-md-at:before{content:"\f34a"}.ivu-icon-md-attach:before{content:"\f34b"}.ivu-icon-md-backspace:before{content:"\f34c"}.ivu-icon-md-barcode:before{content:"\f34d"}.ivu-icon-md-baseball:before{content:"\f34e"}.ivu-icon-md-basket:before{content:"\f34f"}.ivu-icon-md-basketball:before{content:"\f350"}.ivu-icon-md-battery-charging:before{content:"\f351"}.ivu-icon-md-battery-dead:before{content:"\f352"}.ivu-icon-md-battery-full:before{content:"\f353"}.ivu-icon-md-beaker:before{content:"\f354"}.ivu-icon-md-beer:before{content:"\f355"}.ivu-icon-md-bicycle:before{content:"\f356"}.ivu-icon-md-bluetooth:before{content:"\f357"}.ivu-icon-md-boat:before{content:"\f358"}.ivu-icon-md-body:before{content:"\f359"}.ivu-icon-md-bonfire:before{content:"\f35a"}.ivu-icon-md-book:before{content:"\f35b"}.ivu-icon-md-bookmark:before{content:"\f35c"}.ivu-icon-md-bookmarks:before{content:"\f35d"}.ivu-icon-md-bowtie:before{content:"\f35e"}.ivu-icon-md-briefcase:before{content:"\f35f"}.ivu-icon-md-browsers:before{content:"\f360"}.ivu-icon-md-brush:before{content:"\f361"}.ivu-icon-md-bug:before{content:"\f362"}.ivu-icon-md-build:before{content:"\f363"}.ivu-icon-md-bulb:before{content:"\f364"}.ivu-icon-md-bus:before{content:"\f365"}.ivu-icon-md-cafe:before{content:"\f366"}.ivu-icon-md-calculator:before{content:"\f367"}.ivu-icon-md-calendar:before{content:"\f368"}.ivu-icon-md-call:before{content:"\f369"}.ivu-icon-md-camera:before{content:"\f36a"}.ivu-icon-md-car:before{content:"\f36b"}.ivu-icon-md-card:before{content:"\f36c"}.ivu-icon-md-cart:before{content:"\f36d"}.ivu-icon-md-cash:before{content:"\f36e"}.ivu-icon-md-chatboxes:before{content:"\f36f"}.ivu-icon-md-chatbubbles:before{content:"\f370"}.ivu-icon-md-checkbox-outline:before{content:"\f371"}.ivu-icon-md-checkbox:before{content:"\f372"}.ivu-icon-md-checkmark-circle-outline:before{content:"\f373"}.ivu-icon-md-checkmark-circle:before{content:"\f374"}.ivu-icon-md-checkmark:before{content:"\f375"}.ivu-icon-md-clipboard:before{content:"\f376"}.ivu-icon-md-clock:before{content:"\f377"}.ivu-icon-md-close-circle:before{content:"\f378"}.ivu-icon-md-close:before{content:"\f379"}.ivu-icon-md-closed-captioning:before{content:"\f37a"}.ivu-icon-md-cloud-circle:before{content:"\f37b"}.ivu-icon-md-cloud-done:before{content:"\f37c"}.ivu-icon-md-cloud-download:before{content:"\f37d"}.ivu-icon-md-cloud-outline:before{content:"\f37e"}.ivu-icon-md-cloud-upload:before{content:"\f37f"}.ivu-icon-md-cloud:before{content:"\f380"}.ivu-icon-md-cloudy-night:before{content:"\f381"}.ivu-icon-md-cloudy:before{content:"\f382"}.ivu-icon-md-code-download:before{content:"\f383"}.ivu-icon-md-code-working:before{content:"\f384"}.ivu-icon-md-code:before{content:"\f385"}.ivu-icon-md-cog:before{content:"\f386"}.ivu-icon-md-color-fill:before{content:"\f387"}.ivu-icon-md-color-filter:before{content:"\f388"}.ivu-icon-md-color-palette:before{content:"\f389"}.ivu-icon-md-color-wand:before{content:"\f38a"}.ivu-icon-md-compass:before{content:"\f38b"}.ivu-icon-md-construct:before{content:"\f38c"}.ivu-icon-md-contact:before{content:"\f38d"}.ivu-icon-md-contacts:before{content:"\f38e"}.ivu-icon-md-contract:before{content:"\f38f"}.ivu-icon-md-contrast:before{content:"\f390"}.ivu-icon-md-copy:before{content:"\f391"}.ivu-icon-md-create:before{content:"\f392"}.ivu-icon-md-crop:before{content:"\f393"}.ivu-icon-md-cube:before{content:"\f394"}.ivu-icon-md-cut:before{content:"\f395"}.ivu-icon-md-desktop:before{content:"\f396"}.ivu-icon-md-disc:before{content:"\f397"}.ivu-icon-md-document:before{content:"\f398"}.ivu-icon-md-done-all:before{content:"\f399"}.ivu-icon-md-download:before{content:"\f39a"}.ivu-icon-md-easel:before{content:"\f39b"}.ivu-icon-md-egg:before{content:"\f39c"}.ivu-icon-md-exit:before{content:"\f39d"}.ivu-icon-md-expand:before{content:"\f39e"}.ivu-icon-md-eye-off:before{content:"\f39f"}.ivu-icon-md-eye:before{content:"\f3a0"}.ivu-icon-md-fastforward:before{content:"\f3a1"}.ivu-icon-md-female:before{content:"\f3a2"}.ivu-icon-md-filing:before{content:"\f3a3"}.ivu-icon-md-film:before{content:"\f3a4"}.ivu-icon-md-finger-print:before{content:"\f3a5"}.ivu-icon-md-flag:before{content:"\f3a6"}.ivu-icon-md-flame:before{content:"\f3a7"}.ivu-icon-md-flash:before{content:"\f3a8"}.ivu-icon-md-flask:before{content:"\f3a9"}.ivu-icon-md-flower:before{content:"\f3aa"}.ivu-icon-md-folder-open:before{content:"\f3ab"}.ivu-icon-md-folder:before{content:"\f3ac"}.ivu-icon-md-football:before{content:"\f3ad"}.ivu-icon-md-funnel:before{content:"\f3ae"}.ivu-icon-md-game-controller-a:before{content:"\f3af"}.ivu-icon-md-game-controller-b:before{content:"\f3b0"}.ivu-icon-md-git-branch:before{content:"\f3b1"}.ivu-icon-md-git-commit:before{content:"\f3b2"}.ivu-icon-md-git-compare:before{content:"\f3b3"}.ivu-icon-md-git-merge:before{content:"\f3b4"}.ivu-icon-md-git-network:before{content:"\f3b5"}.ivu-icon-md-git-pull-request:before{content:"\f3b6"}.ivu-icon-md-glasses:before{content:"\f3b7"}.ivu-icon-md-globe:before{content:"\f3b8"}.ivu-icon-md-grid:before{content:"\f3b9"}.ivu-icon-md-hammer:before{content:"\f3ba"}.ivu-icon-md-hand:before{content:"\f3bb"}.ivu-icon-md-happy:before{content:"\f3bc"}.ivu-icon-md-headset:before{content:"\f3bd"}.ivu-icon-md-heart-outline:before{content:"\f3be"}.ivu-icon-md-heart:before{content:"\f3bf"}.ivu-icon-md-help-buoy:before{content:"\f3c0"}.ivu-icon-md-help-circle:before{content:"\f3c1"}.ivu-icon-md-help:before{content:"\f3c2"}.ivu-icon-md-home:before{content:"\f3c3"}.ivu-icon-md-ice-cream:before{content:"\f3c4"}.ivu-icon-md-image:before{content:"\f3c5"}.ivu-icon-md-images:before{content:"\f3c6"}.ivu-icon-md-infinite:before{content:"\f3c7"}.ivu-icon-md-information-circle:before{content:"\f3c8"}.ivu-icon-md-information:before{content:"\f3c9"}.ivu-icon-md-ionic:before{content:"\f3ca"}.ivu-icon-md-ionitron:before{content:"\f3cb"}.ivu-icon-md-jet:before{content:"\f3cc"}.ivu-icon-md-key:before{content:"\f3cd"}.ivu-icon-md-keypad:before{content:"\f3ce"}.ivu-icon-md-laptop:before{content:"\f3cf"}.ivu-icon-md-leaf:before{content:"\f3d0"}.ivu-icon-md-link:before{content:"\f3d1"}.ivu-icon-md-list-box:before{content:"\f3d2"}.ivu-icon-md-list:before{content:"\f3d3"}.ivu-icon-md-locate:before{content:"\f3d4"}.ivu-icon-md-lock:before{content:"\f3d5"}.ivu-icon-md-log-in:before{content:"\f3d6"}.ivu-icon-md-log-out:before{content:"\f3d7"}.ivu-icon-md-magnet:before{content:"\f3d8"}.ivu-icon-md-mail-open:before{content:"\f3d9"}.ivu-icon-md-mail:before{content:"\f3da"}.ivu-icon-md-male:before{content:"\f3db"}.ivu-icon-md-man:before{content:"\f3dc"}.ivu-icon-md-map:before{content:"\f3dd"}.ivu-icon-md-medal:before{content:"\f3de"}.ivu-icon-md-medical:before{content:"\f3df"}.ivu-icon-md-medkit:before{content:"\f3e0"}.ivu-icon-md-megaphone:before{content:"\f3e1"}.ivu-icon-md-menu:before{content:"\f3e2"}.ivu-icon-md-mic-off:before{content:"\f3e3"}.ivu-icon-md-mic:before{content:"\f3e4"}.ivu-icon-md-microphone:before{content:"\f3e5"}.ivu-icon-md-moon:before{content:"\f3e6"}.ivu-icon-md-more:before{content:"\f3e7"}.ivu-icon-md-move:before{content:"\f3e8"}.ivu-icon-md-musical-note:before{content:"\f3e9"}.ivu-icon-md-musical-notes:before{content:"\f3ea"}.ivu-icon-md-navigate:before{content:"\f3eb"}.ivu-icon-md-no-smoking:before{content:"\f3ec"}.ivu-icon-md-notifications-off:before{content:"\f3ed"}.ivu-icon-md-notifications-outline:before{content:"\f3ee"}.ivu-icon-md-notifications:before{content:"\f3ef"}.ivu-icon-md-nuclear:before{content:"\f3f0"}.ivu-icon-md-nutrition:before{content:"\f3f1"}.ivu-icon-md-open:before{content:"\f3f2"}.ivu-icon-md-options:before{content:"\f3f3"}.ivu-icon-md-outlet:before{content:"\f3f4"}.ivu-icon-md-paper-plane:before{content:"\f3f5"}.ivu-icon-md-paper:before{content:"\f3f6"}.ivu-icon-md-partly-sunny:before{content:"\f3f7"}.ivu-icon-md-pause:before{content:"\f3f8"}.ivu-icon-md-paw:before{content:"\f3f9"}.ivu-icon-md-people:before{content:"\f3fa"}.ivu-icon-md-person-add:before{content:"\f3fb"}.ivu-icon-md-person:before{content:"\f3fc"}.ivu-icon-md-phone-landscape:before{content:"\f3fd"}.ivu-icon-md-phone-portrait:before{content:"\f3fe"}.ivu-icon-md-photos:before{content:"\f3ff"}.ivu-icon-md-pie:before{content:"\f400"}.ivu-icon-md-pin:before{content:"\f401"}.ivu-icon-md-pint:before{content:"\f402"}.ivu-icon-md-pizza:before{content:"\f403"}.ivu-icon-md-plane:before{content:"\f404"}.ivu-icon-md-planet:before{content:"\f405"}.ivu-icon-md-play:before{content:"\f406"}.ivu-icon-md-podium:before{content:"\f407"}.ivu-icon-md-power:before{content:"\f408"}.ivu-icon-md-pricetag:before{content:"\f409"}.ivu-icon-md-pricetags:before{content:"\f40a"}.ivu-icon-md-print:before{content:"\f40b"}.ivu-icon-md-pulse:before{content:"\f40c"}.ivu-icon-md-qr-scanner:before{content:"\f40d"}.ivu-icon-md-quote:before{content:"\f40e"}.ivu-icon-md-radio-button-off:before{content:"\f40f"}.ivu-icon-md-radio-button-on:before{content:"\f410"}.ivu-icon-md-radio:before{content:"\f411"}.ivu-icon-md-rainy:before{content:"\f412"}.ivu-icon-md-recording:before{content:"\f413"}.ivu-icon-md-redo:before{content:"\f414"}.ivu-icon-md-refresh-circle:before{content:"\f415"}.ivu-icon-md-refresh:before{content:"\f416"}.ivu-icon-md-remove-circle:before{content:"\f417"}.ivu-icon-md-remove:before{content:"\f418"}.ivu-icon-md-reorder:before{content:"\f419"}.ivu-icon-md-repeat:before{content:"\f41a"}.ivu-icon-md-resize:before{content:"\f41b"}.ivu-icon-md-restaurant:before{content:"\f41c"}.ivu-icon-md-return-left:before{content:"\f41d"}.ivu-icon-md-return-right:before{content:"\f41e"}.ivu-icon-md-reverse-camera:before{content:"\f41f"}.ivu-icon-md-rewind:before{content:"\f420"}.ivu-icon-md-ribbon:before{content:"\f421"}.ivu-icon-md-rose:before{content:"\f422"}.ivu-icon-md-sad:before{content:"\f423"}.ivu-icon-md-school:before{content:"\f424"}.ivu-icon-md-search:before{content:"\f425"}.ivu-icon-md-send:before{content:"\f426"}.ivu-icon-md-settings:before{content:"\f427"}.ivu-icon-md-share-alt:before{content:"\f428"}.ivu-icon-md-share:before{content:"\f429"}.ivu-icon-md-shirt:before{content:"\f42a"}.ivu-icon-md-shuffle:before{content:"\f42b"}.ivu-icon-md-skip-backward:before{content:"\f42c"}.ivu-icon-md-skip-forward:before{content:"\f42d"}.ivu-icon-md-snow:before{content:"\f42e"}.ivu-icon-md-speedometer:before{content:"\f42f"}.ivu-icon-md-square-outline:before{content:"\f430"}.ivu-icon-md-square:before{content:"\f431"}.ivu-icon-md-star-half:before{content:"\f432"}.ivu-icon-md-star-outline:before{content:"\f433"}.ivu-icon-md-star:before{content:"\f434"}.ivu-icon-md-stats:before{content:"\f435"}.ivu-icon-md-stopwatch:before{content:"\f436"}.ivu-icon-md-subway:before{content:"\f437"}.ivu-icon-md-sunny:before{content:"\f438"}.ivu-icon-md-swap:before{content:"\f439"}.ivu-icon-md-switch:before{content:"\f43a"}.ivu-icon-md-sync:before{content:"\f43b"}.ivu-icon-md-tablet-landscape:before{content:"\f43c"}.ivu-icon-md-tablet-portrait:before{content:"\f43d"}.ivu-icon-md-tennisball:before{content:"\f43e"}.ivu-icon-md-text:before{content:"\f43f"}.ivu-icon-md-thermometer:before{content:"\f440"}.ivu-icon-md-thumbs-down:before{content:"\f441"}.ivu-icon-md-thumbs-up:before{content:"\f442"}.ivu-icon-md-thunderstorm:before{content:"\f443"}.ivu-icon-md-time:before{content:"\f444"}.ivu-icon-md-timer:before{content:"\f445"}.ivu-icon-md-train:before{content:"\f446"}.ivu-icon-md-transgender:before{content:"\f447"}.ivu-icon-md-trash:before{content:"\f448"}.ivu-icon-md-trending-down:before{content:"\f449"}.ivu-icon-md-trending-up:before{content:"\f44a"}.ivu-icon-md-trophy:before{content:"\f44b"}.ivu-icon-md-umbrella:before{content:"\f44c"}.ivu-icon-md-undo:before{content:"\f44d"}.ivu-icon-md-unlock:before{content:"\f44e"}.ivu-icon-md-videocam:before{content:"\f44f"}.ivu-icon-md-volume-down:before{content:"\f450"}.ivu-icon-md-volume-mute:before{content:"\f451"}.ivu-icon-md-volume-off:before{content:"\f452"}.ivu-icon-md-volume-up:before{content:"\f453"}.ivu-icon-md-walk:before{content:"\f454"}.ivu-icon-md-warning:before{content:"\f455"}.ivu-icon-md-watch:before{content:"\f456"}.ivu-icon-md-water:before{content:"\f457"}.ivu-icon-md-wifi:before{content:"\f458"}.ivu-icon-md-wine:before{content:"\f459"}.ivu-icon-md-woman:before{content:"\f45a"}.ivu-icon-ios-loading:before{content:"\f45b"}.ivu-row{position:relative;margin-left:0;margin-right:0;height:auto;zoom:1;display:block}.ivu-row:after,.ivu-row:before{content:"";display:table}.ivu-row:after{clear:both;visibility:hidden;font-size:0;height:0}.ivu-row-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap}.ivu-row-flex:after,.ivu-row-flex:before{display:-webkit-box;display:-ms-flexbox;display:flex}.ivu-row-flex-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.ivu-row-flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ivu-row-flex-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.ivu-row-flex-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.ivu-row-flex-space-around{-ms-flex-pack:distribute;justify-content:space-around}.ivu-row-flex-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.ivu-row-flex-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ivu-row-flex-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.ivu-col{position:relative;display:block}.ivu-col-span-1,.ivu-col-span-10,.ivu-col-span-11,.ivu-col-span-12,.ivu-col-span-13,.ivu-col-span-14,.ivu-col-span-15,.ivu-col-span-16,.ivu-col-span-17,.ivu-col-span-18,.ivu-col-span-19,.ivu-col-span-2,.ivu-col-span-20,.ivu-col-span-21,.ivu-col-span-22,.ivu-col-span-23,.ivu-col-span-24,.ivu-col-span-3,.ivu-col-span-4,.ivu-col-span-5,.ivu-col-span-6,.ivu-col-span-7,.ivu-col-span-8,.ivu-col-span-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-24{display:block;width:100%}.ivu-col-push-24{left:100%}.ivu-col-pull-24{right:100%}.ivu-col-offset-24{margin-left:100%}.ivu-col-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-23{display:block;width:95.83333333%}.ivu-col-push-23{left:95.83333333%}.ivu-col-pull-23{right:95.83333333%}.ivu-col-offset-23{margin-left:95.83333333%}.ivu-col-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-22{display:block;width:91.66666667%}.ivu-col-push-22{left:91.66666667%}.ivu-col-pull-22{right:91.66666667%}.ivu-col-offset-22{margin-left:91.66666667%}.ivu-col-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-21{display:block;width:87.5%}.ivu-col-push-21{left:87.5%}.ivu-col-pull-21{right:87.5%}.ivu-col-offset-21{margin-left:87.5%}.ivu-col-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-20{display:block;width:83.33333333%}.ivu-col-push-20{left:83.33333333%}.ivu-col-pull-20{right:83.33333333%}.ivu-col-offset-20{margin-left:83.33333333%}.ivu-col-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-19{display:block;width:79.16666667%}.ivu-col-push-19{left:79.16666667%}.ivu-col-pull-19{right:79.16666667%}.ivu-col-offset-19{margin-left:79.16666667%}.ivu-col-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-18{display:block;width:75%}.ivu-col-push-18{left:75%}.ivu-col-pull-18{right:75%}.ivu-col-offset-18{margin-left:75%}.ivu-col-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-17{display:block;width:70.83333333%}.ivu-col-push-17{left:70.83333333%}.ivu-col-pull-17{right:70.83333333%}.ivu-col-offset-17{margin-left:70.83333333%}.ivu-col-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-16{display:block;width:66.66666667%}.ivu-col-push-16{left:66.66666667%}.ivu-col-pull-16{right:66.66666667%}.ivu-col-offset-16{margin-left:66.66666667%}.ivu-col-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-15{display:block;width:62.5%}.ivu-col-push-15{left:62.5%}.ivu-col-pull-15{right:62.5%}.ivu-col-offset-15{margin-left:62.5%}.ivu-col-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-14{display:block;width:58.33333333%}.ivu-col-push-14{left:58.33333333%}.ivu-col-pull-14{right:58.33333333%}.ivu-col-offset-14{margin-left:58.33333333%}.ivu-col-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-13{display:block;width:54.16666667%}.ivu-col-push-13{left:54.16666667%}.ivu-col-pull-13{right:54.16666667%}.ivu-col-offset-13{margin-left:54.16666667%}.ivu-col-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-12{display:block;width:50%}.ivu-col-push-12{left:50%}.ivu-col-pull-12{right:50%}.ivu-col-offset-12{margin-left:50%}.ivu-col-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-11{display:block;width:45.83333333%}.ivu-col-push-11{left:45.83333333%}.ivu-col-pull-11{right:45.83333333%}.ivu-col-offset-11{margin-left:45.83333333%}.ivu-col-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-10{display:block;width:41.66666667%}.ivu-col-push-10{left:41.66666667%}.ivu-col-pull-10{right:41.66666667%}.ivu-col-offset-10{margin-left:41.66666667%}.ivu-col-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-9{display:block;width:37.5%}.ivu-col-push-9{left:37.5%}.ivu-col-pull-9{right:37.5%}.ivu-col-offset-9{margin-left:37.5%}.ivu-col-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-8{display:block;width:33.33333333%}.ivu-col-push-8{left:33.33333333%}.ivu-col-pull-8{right:33.33333333%}.ivu-col-offset-8{margin-left:33.33333333%}.ivu-col-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-7{display:block;width:29.16666667%}.ivu-col-push-7{left:29.16666667%}.ivu-col-pull-7{right:29.16666667%}.ivu-col-offset-7{margin-left:29.16666667%}.ivu-col-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-6{display:block;width:25%}.ivu-col-push-6{left:25%}.ivu-col-pull-6{right:25%}.ivu-col-offset-6{margin-left:25%}.ivu-col-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-5{display:block;width:20.83333333%}.ivu-col-push-5{left:20.83333333%}.ivu-col-pull-5{right:20.83333333%}.ivu-col-offset-5{margin-left:20.83333333%}.ivu-col-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-4{display:block;width:16.66666667%}.ivu-col-push-4{left:16.66666667%}.ivu-col-pull-4{right:16.66666667%}.ivu-col-offset-4{margin-left:16.66666667%}.ivu-col-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-3{display:block;width:12.5%}.ivu-col-push-3{left:12.5%}.ivu-col-pull-3{right:12.5%}.ivu-col-offset-3{margin-left:12.5%}.ivu-col-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-2{display:block;width:8.33333333%}.ivu-col-push-2{left:8.33333333%}.ivu-col-pull-2{right:8.33333333%}.ivu-col-offset-2{margin-left:8.33333333%}.ivu-col-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-1{display:block;width:4.16666667%}.ivu-col-push-1{left:4.16666667%}.ivu-col-pull-1{right:4.16666667%}.ivu-col-offset-1{margin-left:4.16666667%}.ivu-col-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-0{display:none}.ivu-col-push-0{left:auto}.ivu-col-pull-0{right:auto}.ivu-col-offset-0{margin-left:0}.ivu-col-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.ivu-col-span-xs-1,.ivu-col-span-xs-10,.ivu-col-span-xs-11,.ivu-col-span-xs-12,.ivu-col-span-xs-13,.ivu-col-span-xs-14,.ivu-col-span-xs-15,.ivu-col-span-xs-16,.ivu-col-span-xs-17,.ivu-col-span-xs-18,.ivu-col-span-xs-19,.ivu-col-span-xs-2,.ivu-col-span-xs-20,.ivu-col-span-xs-21,.ivu-col-span-xs-22,.ivu-col-span-xs-23,.ivu-col-span-xs-24,.ivu-col-span-xs-3,.ivu-col-span-xs-4,.ivu-col-span-xs-5,.ivu-col-span-xs-6,.ivu-col-span-xs-7,.ivu-col-span-xs-8,.ivu-col-span-xs-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-xs-24{display:block;width:100%}.ivu-col-xs-push-24{left:100%}.ivu-col-xs-pull-24{right:100%}.ivu-col-xs-offset-24{margin-left:100%}.ivu-col-xs-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-xs-23{display:block;width:95.83333333%}.ivu-col-xs-push-23{left:95.83333333%}.ivu-col-xs-pull-23{right:95.83333333%}.ivu-col-xs-offset-23{margin-left:95.83333333%}.ivu-col-xs-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-xs-22{display:block;width:91.66666667%}.ivu-col-xs-push-22{left:91.66666667%}.ivu-col-xs-pull-22{right:91.66666667%}.ivu-col-xs-offset-22{margin-left:91.66666667%}.ivu-col-xs-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-xs-21{display:block;width:87.5%}.ivu-col-xs-push-21{left:87.5%}.ivu-col-xs-pull-21{right:87.5%}.ivu-col-xs-offset-21{margin-left:87.5%}.ivu-col-xs-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-xs-20{display:block;width:83.33333333%}.ivu-col-xs-push-20{left:83.33333333%}.ivu-col-xs-pull-20{right:83.33333333%}.ivu-col-xs-offset-20{margin-left:83.33333333%}.ivu-col-xs-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-xs-19{display:block;width:79.16666667%}.ivu-col-xs-push-19{left:79.16666667%}.ivu-col-xs-pull-19{right:79.16666667%}.ivu-col-xs-offset-19{margin-left:79.16666667%}.ivu-col-xs-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-xs-18{display:block;width:75%}.ivu-col-xs-push-18{left:75%}.ivu-col-xs-pull-18{right:75%}.ivu-col-xs-offset-18{margin-left:75%}.ivu-col-xs-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-xs-17{display:block;width:70.83333333%}.ivu-col-xs-push-17{left:70.83333333%}.ivu-col-xs-pull-17{right:70.83333333%}.ivu-col-xs-offset-17{margin-left:70.83333333%}.ivu-col-xs-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-xs-16{display:block;width:66.66666667%}.ivu-col-xs-push-16{left:66.66666667%}.ivu-col-xs-pull-16{right:66.66666667%}.ivu-col-xs-offset-16{margin-left:66.66666667%}.ivu-col-xs-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-xs-15{display:block;width:62.5%}.ivu-col-xs-push-15{left:62.5%}.ivu-col-xs-pull-15{right:62.5%}.ivu-col-xs-offset-15{margin-left:62.5%}.ivu-col-xs-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-xs-14{display:block;width:58.33333333%}.ivu-col-xs-push-14{left:58.33333333%}.ivu-col-xs-pull-14{right:58.33333333%}.ivu-col-xs-offset-14{margin-left:58.33333333%}.ivu-col-xs-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-xs-13{display:block;width:54.16666667%}.ivu-col-xs-push-13{left:54.16666667%}.ivu-col-xs-pull-13{right:54.16666667%}.ivu-col-xs-offset-13{margin-left:54.16666667%}.ivu-col-xs-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-xs-12{display:block;width:50%}.ivu-col-xs-push-12{left:50%}.ivu-col-xs-pull-12{right:50%}.ivu-col-xs-offset-12{margin-left:50%}.ivu-col-xs-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-xs-11{display:block;width:45.83333333%}.ivu-col-xs-push-11{left:45.83333333%}.ivu-col-xs-pull-11{right:45.83333333%}.ivu-col-xs-offset-11{margin-left:45.83333333%}.ivu-col-xs-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-xs-10{display:block;width:41.66666667%}.ivu-col-xs-push-10{left:41.66666667%}.ivu-col-xs-pull-10{right:41.66666667%}.ivu-col-xs-offset-10{margin-left:41.66666667%}.ivu-col-xs-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-xs-9{display:block;width:37.5%}.ivu-col-xs-push-9{left:37.5%}.ivu-col-xs-pull-9{right:37.5%}.ivu-col-xs-offset-9{margin-left:37.5%}.ivu-col-xs-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-xs-8{display:block;width:33.33333333%}.ivu-col-xs-push-8{left:33.33333333%}.ivu-col-xs-pull-8{right:33.33333333%}.ivu-col-xs-offset-8{margin-left:33.33333333%}.ivu-col-xs-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-xs-7{display:block;width:29.16666667%}.ivu-col-xs-push-7{left:29.16666667%}.ivu-col-xs-pull-7{right:29.16666667%}.ivu-col-xs-offset-7{margin-left:29.16666667%}.ivu-col-xs-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-xs-6{display:block;width:25%}.ivu-col-xs-push-6{left:25%}.ivu-col-xs-pull-6{right:25%}.ivu-col-xs-offset-6{margin-left:25%}.ivu-col-xs-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-xs-5{display:block;width:20.83333333%}.ivu-col-xs-push-5{left:20.83333333%}.ivu-col-xs-pull-5{right:20.83333333%}.ivu-col-xs-offset-5{margin-left:20.83333333%}.ivu-col-xs-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-xs-4{display:block;width:16.66666667%}.ivu-col-xs-push-4{left:16.66666667%}.ivu-col-xs-pull-4{right:16.66666667%}.ivu-col-xs-offset-4{margin-left:16.66666667%}.ivu-col-xs-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-xs-3{display:block;width:12.5%}.ivu-col-xs-push-3{left:12.5%}.ivu-col-xs-pull-3{right:12.5%}.ivu-col-xs-offset-3{margin-left:12.5%}.ivu-col-xs-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-xs-2{display:block;width:8.33333333%}.ivu-col-xs-push-2{left:8.33333333%}.ivu-col-xs-pull-2{right:8.33333333%}.ivu-col-xs-offset-2{margin-left:8.33333333%}.ivu-col-xs-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-xs-1{display:block;width:4.16666667%}.ivu-col-xs-push-1{left:4.16666667%}.ivu-col-xs-pull-1{right:4.16666667%}.ivu-col-xs-offset-1{margin-left:4.16666667%}.ivu-col-xs-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-xs-0{display:none}.ivu-col-xs-push-0{left:auto}.ivu-col-xs-pull-0{right:auto}.ivu-col-xs-offset-0{margin-left:0}.ivu-col-xs-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}@media (min-width:576px){.ivu-col-span-sm-1,.ivu-col-span-sm-10,.ivu-col-span-sm-11,.ivu-col-span-sm-12,.ivu-col-span-sm-13,.ivu-col-span-sm-14,.ivu-col-span-sm-15,.ivu-col-span-sm-16,.ivu-col-span-sm-17,.ivu-col-span-sm-18,.ivu-col-span-sm-19,.ivu-col-span-sm-2,.ivu-col-span-sm-20,.ivu-col-span-sm-21,.ivu-col-span-sm-22,.ivu-col-span-sm-23,.ivu-col-span-sm-24,.ivu-col-span-sm-3,.ivu-col-span-sm-4,.ivu-col-span-sm-5,.ivu-col-span-sm-6,.ivu-col-span-sm-7,.ivu-col-span-sm-8,.ivu-col-span-sm-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-sm-24{display:block;width:100%}.ivu-col-sm-push-24{left:100%}.ivu-col-sm-pull-24{right:100%}.ivu-col-sm-offset-24{margin-left:100%}.ivu-col-sm-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-sm-23{display:block;width:95.83333333%}.ivu-col-sm-push-23{left:95.83333333%}.ivu-col-sm-pull-23{right:95.83333333%}.ivu-col-sm-offset-23{margin-left:95.83333333%}.ivu-col-sm-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-sm-22{display:block;width:91.66666667%}.ivu-col-sm-push-22{left:91.66666667%}.ivu-col-sm-pull-22{right:91.66666667%}.ivu-col-sm-offset-22{margin-left:91.66666667%}.ivu-col-sm-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-sm-21{display:block;width:87.5%}.ivu-col-sm-push-21{left:87.5%}.ivu-col-sm-pull-21{right:87.5%}.ivu-col-sm-offset-21{margin-left:87.5%}.ivu-col-sm-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-sm-20{display:block;width:83.33333333%}.ivu-col-sm-push-20{left:83.33333333%}.ivu-col-sm-pull-20{right:83.33333333%}.ivu-col-sm-offset-20{margin-left:83.33333333%}.ivu-col-sm-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-sm-19{display:block;width:79.16666667%}.ivu-col-sm-push-19{left:79.16666667%}.ivu-col-sm-pull-19{right:79.16666667%}.ivu-col-sm-offset-19{margin-left:79.16666667%}.ivu-col-sm-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-sm-18{display:block;width:75%}.ivu-col-sm-push-18{left:75%}.ivu-col-sm-pull-18{right:75%}.ivu-col-sm-offset-18{margin-left:75%}.ivu-col-sm-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-sm-17{display:block;width:70.83333333%}.ivu-col-sm-push-17{left:70.83333333%}.ivu-col-sm-pull-17{right:70.83333333%}.ivu-col-sm-offset-17{margin-left:70.83333333%}.ivu-col-sm-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-sm-16{display:block;width:66.66666667%}.ivu-col-sm-push-16{left:66.66666667%}.ivu-col-sm-pull-16{right:66.66666667%}.ivu-col-sm-offset-16{margin-left:66.66666667%}.ivu-col-sm-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-sm-15{display:block;width:62.5%}.ivu-col-sm-push-15{left:62.5%}.ivu-col-sm-pull-15{right:62.5%}.ivu-col-sm-offset-15{margin-left:62.5%}.ivu-col-sm-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-sm-14{display:block;width:58.33333333%}.ivu-col-sm-push-14{left:58.33333333%}.ivu-col-sm-pull-14{right:58.33333333%}.ivu-col-sm-offset-14{margin-left:58.33333333%}.ivu-col-sm-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-sm-13{display:block;width:54.16666667%}.ivu-col-sm-push-13{left:54.16666667%}.ivu-col-sm-pull-13{right:54.16666667%}.ivu-col-sm-offset-13{margin-left:54.16666667%}.ivu-col-sm-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-sm-12{display:block;width:50%}.ivu-col-sm-push-12{left:50%}.ivu-col-sm-pull-12{right:50%}.ivu-col-sm-offset-12{margin-left:50%}.ivu-col-sm-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-sm-11{display:block;width:45.83333333%}.ivu-col-sm-push-11{left:45.83333333%}.ivu-col-sm-pull-11{right:45.83333333%}.ivu-col-sm-offset-11{margin-left:45.83333333%}.ivu-col-sm-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-sm-10{display:block;width:41.66666667%}.ivu-col-sm-push-10{left:41.66666667%}.ivu-col-sm-pull-10{right:41.66666667%}.ivu-col-sm-offset-10{margin-left:41.66666667%}.ivu-col-sm-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-sm-9{display:block;width:37.5%}.ivu-col-sm-push-9{left:37.5%}.ivu-col-sm-pull-9{right:37.5%}.ivu-col-sm-offset-9{margin-left:37.5%}.ivu-col-sm-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-sm-8{display:block;width:33.33333333%}.ivu-col-sm-push-8{left:33.33333333%}.ivu-col-sm-pull-8{right:33.33333333%}.ivu-col-sm-offset-8{margin-left:33.33333333%}.ivu-col-sm-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-sm-7{display:block;width:29.16666667%}.ivu-col-sm-push-7{left:29.16666667%}.ivu-col-sm-pull-7{right:29.16666667%}.ivu-col-sm-offset-7{margin-left:29.16666667%}.ivu-col-sm-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-sm-6{display:block;width:25%}.ivu-col-sm-push-6{left:25%}.ivu-col-sm-pull-6{right:25%}.ivu-col-sm-offset-6{margin-left:25%}.ivu-col-sm-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-sm-5{display:block;width:20.83333333%}.ivu-col-sm-push-5{left:20.83333333%}.ivu-col-sm-pull-5{right:20.83333333%}.ivu-col-sm-offset-5{margin-left:20.83333333%}.ivu-col-sm-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-sm-4{display:block;width:16.66666667%}.ivu-col-sm-push-4{left:16.66666667%}.ivu-col-sm-pull-4{right:16.66666667%}.ivu-col-sm-offset-4{margin-left:16.66666667%}.ivu-col-sm-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-sm-3{display:block;width:12.5%}.ivu-col-sm-push-3{left:12.5%}.ivu-col-sm-pull-3{right:12.5%}.ivu-col-sm-offset-3{margin-left:12.5%}.ivu-col-sm-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-sm-2{display:block;width:8.33333333%}.ivu-col-sm-push-2{left:8.33333333%}.ivu-col-sm-pull-2{right:8.33333333%}.ivu-col-sm-offset-2{margin-left:8.33333333%}.ivu-col-sm-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-sm-1{display:block;width:4.16666667%}.ivu-col-sm-push-1{left:4.16666667%}.ivu-col-sm-pull-1{right:4.16666667%}.ivu-col-sm-offset-1{margin-left:4.16666667%}.ivu-col-sm-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-sm-0{display:none}.ivu-col-sm-push-0{left:auto}.ivu-col-sm-pull-0{right:auto}.ivu-col-sm-offset-0{margin-left:0}.ivu-col-sm-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:768px){.ivu-col-span-md-1,.ivu-col-span-md-10,.ivu-col-span-md-11,.ivu-col-span-md-12,.ivu-col-span-md-13,.ivu-col-span-md-14,.ivu-col-span-md-15,.ivu-col-span-md-16,.ivu-col-span-md-17,.ivu-col-span-md-18,.ivu-col-span-md-19,.ivu-col-span-md-2,.ivu-col-span-md-20,.ivu-col-span-md-21,.ivu-col-span-md-22,.ivu-col-span-md-23,.ivu-col-span-md-24,.ivu-col-span-md-3,.ivu-col-span-md-4,.ivu-col-span-md-5,.ivu-col-span-md-6,.ivu-col-span-md-7,.ivu-col-span-md-8,.ivu-col-span-md-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-md-24{display:block;width:100%}.ivu-col-md-push-24{left:100%}.ivu-col-md-pull-24{right:100%}.ivu-col-md-offset-24{margin-left:100%}.ivu-col-md-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-md-23{display:block;width:95.83333333%}.ivu-col-md-push-23{left:95.83333333%}.ivu-col-md-pull-23{right:95.83333333%}.ivu-col-md-offset-23{margin-left:95.83333333%}.ivu-col-md-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-md-22{display:block;width:91.66666667%}.ivu-col-md-push-22{left:91.66666667%}.ivu-col-md-pull-22{right:91.66666667%}.ivu-col-md-offset-22{margin-left:91.66666667%}.ivu-col-md-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-md-21{display:block;width:87.5%}.ivu-col-md-push-21{left:87.5%}.ivu-col-md-pull-21{right:87.5%}.ivu-col-md-offset-21{margin-left:87.5%}.ivu-col-md-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-md-20{display:block;width:83.33333333%}.ivu-col-md-push-20{left:83.33333333%}.ivu-col-md-pull-20{right:83.33333333%}.ivu-col-md-offset-20{margin-left:83.33333333%}.ivu-col-md-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-md-19{display:block;width:79.16666667%}.ivu-col-md-push-19{left:79.16666667%}.ivu-col-md-pull-19{right:79.16666667%}.ivu-col-md-offset-19{margin-left:79.16666667%}.ivu-col-md-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-md-18{display:block;width:75%}.ivu-col-md-push-18{left:75%}.ivu-col-md-pull-18{right:75%}.ivu-col-md-offset-18{margin-left:75%}.ivu-col-md-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-md-17{display:block;width:70.83333333%}.ivu-col-md-push-17{left:70.83333333%}.ivu-col-md-pull-17{right:70.83333333%}.ivu-col-md-offset-17{margin-left:70.83333333%}.ivu-col-md-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-md-16{display:block;width:66.66666667%}.ivu-col-md-push-16{left:66.66666667%}.ivu-col-md-pull-16{right:66.66666667%}.ivu-col-md-offset-16{margin-left:66.66666667%}.ivu-col-md-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-md-15{display:block;width:62.5%}.ivu-col-md-push-15{left:62.5%}.ivu-col-md-pull-15{right:62.5%}.ivu-col-md-offset-15{margin-left:62.5%}.ivu-col-md-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-md-14{display:block;width:58.33333333%}.ivu-col-md-push-14{left:58.33333333%}.ivu-col-md-pull-14{right:58.33333333%}.ivu-col-md-offset-14{margin-left:58.33333333%}.ivu-col-md-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-md-13{display:block;width:54.16666667%}.ivu-col-md-push-13{left:54.16666667%}.ivu-col-md-pull-13{right:54.16666667%}.ivu-col-md-offset-13{margin-left:54.16666667%}.ivu-col-md-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-md-12{display:block;width:50%}.ivu-col-md-push-12{left:50%}.ivu-col-md-pull-12{right:50%}.ivu-col-md-offset-12{margin-left:50%}.ivu-col-md-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-md-11{display:block;width:45.83333333%}.ivu-col-md-push-11{left:45.83333333%}.ivu-col-md-pull-11{right:45.83333333%}.ivu-col-md-offset-11{margin-left:45.83333333%}.ivu-col-md-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-md-10{display:block;width:41.66666667%}.ivu-col-md-push-10{left:41.66666667%}.ivu-col-md-pull-10{right:41.66666667%}.ivu-col-md-offset-10{margin-left:41.66666667%}.ivu-col-md-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-md-9{display:block;width:37.5%}.ivu-col-md-push-9{left:37.5%}.ivu-col-md-pull-9{right:37.5%}.ivu-col-md-offset-9{margin-left:37.5%}.ivu-col-md-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-md-8{display:block;width:33.33333333%}.ivu-col-md-push-8{left:33.33333333%}.ivu-col-md-pull-8{right:33.33333333%}.ivu-col-md-offset-8{margin-left:33.33333333%}.ivu-col-md-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-md-7{display:block;width:29.16666667%}.ivu-col-md-push-7{left:29.16666667%}.ivu-col-md-pull-7{right:29.16666667%}.ivu-col-md-offset-7{margin-left:29.16666667%}.ivu-col-md-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-md-6{display:block;width:25%}.ivu-col-md-push-6{left:25%}.ivu-col-md-pull-6{right:25%}.ivu-col-md-offset-6{margin-left:25%}.ivu-col-md-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-md-5{display:block;width:20.83333333%}.ivu-col-md-push-5{left:20.83333333%}.ivu-col-md-pull-5{right:20.83333333%}.ivu-col-md-offset-5{margin-left:20.83333333%}.ivu-col-md-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-md-4{display:block;width:16.66666667%}.ivu-col-md-push-4{left:16.66666667%}.ivu-col-md-pull-4{right:16.66666667%}.ivu-col-md-offset-4{margin-left:16.66666667%}.ivu-col-md-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-md-3{display:block;width:12.5%}.ivu-col-md-push-3{left:12.5%}.ivu-col-md-pull-3{right:12.5%}.ivu-col-md-offset-3{margin-left:12.5%}.ivu-col-md-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-md-2{display:block;width:8.33333333%}.ivu-col-md-push-2{left:8.33333333%}.ivu-col-md-pull-2{right:8.33333333%}.ivu-col-md-offset-2{margin-left:8.33333333%}.ivu-col-md-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-md-1{display:block;width:4.16666667%}.ivu-col-md-push-1{left:4.16666667%}.ivu-col-md-pull-1{right:4.16666667%}.ivu-col-md-offset-1{margin-left:4.16666667%}.ivu-col-md-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-md-0{display:none}.ivu-col-md-push-0{left:auto}.ivu-col-md-pull-0{right:auto}.ivu-col-md-offset-0{margin-left:0}.ivu-col-md-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:992px){.ivu-col-span-lg-1,.ivu-col-span-lg-10,.ivu-col-span-lg-11,.ivu-col-span-lg-12,.ivu-col-span-lg-13,.ivu-col-span-lg-14,.ivu-col-span-lg-15,.ivu-col-span-lg-16,.ivu-col-span-lg-17,.ivu-col-span-lg-18,.ivu-col-span-lg-19,.ivu-col-span-lg-2,.ivu-col-span-lg-20,.ivu-col-span-lg-21,.ivu-col-span-lg-22,.ivu-col-span-lg-23,.ivu-col-span-lg-24,.ivu-col-span-lg-3,.ivu-col-span-lg-4,.ivu-col-span-lg-5,.ivu-col-span-lg-6,.ivu-col-span-lg-7,.ivu-col-span-lg-8,.ivu-col-span-lg-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-lg-24{display:block;width:100%}.ivu-col-lg-push-24{left:100%}.ivu-col-lg-pull-24{right:100%}.ivu-col-lg-offset-24{margin-left:100%}.ivu-col-lg-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-lg-23{display:block;width:95.83333333%}.ivu-col-lg-push-23{left:95.83333333%}.ivu-col-lg-pull-23{right:95.83333333%}.ivu-col-lg-offset-23{margin-left:95.83333333%}.ivu-col-lg-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-lg-22{display:block;width:91.66666667%}.ivu-col-lg-push-22{left:91.66666667%}.ivu-col-lg-pull-22{right:91.66666667%}.ivu-col-lg-offset-22{margin-left:91.66666667%}.ivu-col-lg-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-lg-21{display:block;width:87.5%}.ivu-col-lg-push-21{left:87.5%}.ivu-col-lg-pull-21{right:87.5%}.ivu-col-lg-offset-21{margin-left:87.5%}.ivu-col-lg-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-lg-20{display:block;width:83.33333333%}.ivu-col-lg-push-20{left:83.33333333%}.ivu-col-lg-pull-20{right:83.33333333%}.ivu-col-lg-offset-20{margin-left:83.33333333%}.ivu-col-lg-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-lg-19{display:block;width:79.16666667%}.ivu-col-lg-push-19{left:79.16666667%}.ivu-col-lg-pull-19{right:79.16666667%}.ivu-col-lg-offset-19{margin-left:79.16666667%}.ivu-col-lg-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-lg-18{display:block;width:75%}.ivu-col-lg-push-18{left:75%}.ivu-col-lg-pull-18{right:75%}.ivu-col-lg-offset-18{margin-left:75%}.ivu-col-lg-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-lg-17{display:block;width:70.83333333%}.ivu-col-lg-push-17{left:70.83333333%}.ivu-col-lg-pull-17{right:70.83333333%}.ivu-col-lg-offset-17{margin-left:70.83333333%}.ivu-col-lg-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-lg-16{display:block;width:66.66666667%}.ivu-col-lg-push-16{left:66.66666667%}.ivu-col-lg-pull-16{right:66.66666667%}.ivu-col-lg-offset-16{margin-left:66.66666667%}.ivu-col-lg-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-lg-15{display:block;width:62.5%}.ivu-col-lg-push-15{left:62.5%}.ivu-col-lg-pull-15{right:62.5%}.ivu-col-lg-offset-15{margin-left:62.5%}.ivu-col-lg-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-lg-14{display:block;width:58.33333333%}.ivu-col-lg-push-14{left:58.33333333%}.ivu-col-lg-pull-14{right:58.33333333%}.ivu-col-lg-offset-14{margin-left:58.33333333%}.ivu-col-lg-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-lg-13{display:block;width:54.16666667%}.ivu-col-lg-push-13{left:54.16666667%}.ivu-col-lg-pull-13{right:54.16666667%}.ivu-col-lg-offset-13{margin-left:54.16666667%}.ivu-col-lg-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-lg-12{display:block;width:50%}.ivu-col-lg-push-12{left:50%}.ivu-col-lg-pull-12{right:50%}.ivu-col-lg-offset-12{margin-left:50%}.ivu-col-lg-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-lg-11{display:block;width:45.83333333%}.ivu-col-lg-push-11{left:45.83333333%}.ivu-col-lg-pull-11{right:45.83333333%}.ivu-col-lg-offset-11{margin-left:45.83333333%}.ivu-col-lg-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-lg-10{display:block;width:41.66666667%}.ivu-col-lg-push-10{left:41.66666667%}.ivu-col-lg-pull-10{right:41.66666667%}.ivu-col-lg-offset-10{margin-left:41.66666667%}.ivu-col-lg-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-lg-9{display:block;width:37.5%}.ivu-col-lg-push-9{left:37.5%}.ivu-col-lg-pull-9{right:37.5%}.ivu-col-lg-offset-9{margin-left:37.5%}.ivu-col-lg-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-lg-8{display:block;width:33.33333333%}.ivu-col-lg-push-8{left:33.33333333%}.ivu-col-lg-pull-8{right:33.33333333%}.ivu-col-lg-offset-8{margin-left:33.33333333%}.ivu-col-lg-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-lg-7{display:block;width:29.16666667%}.ivu-col-lg-push-7{left:29.16666667%}.ivu-col-lg-pull-7{right:29.16666667%}.ivu-col-lg-offset-7{margin-left:29.16666667%}.ivu-col-lg-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-lg-6{display:block;width:25%}.ivu-col-lg-push-6{left:25%}.ivu-col-lg-pull-6{right:25%}.ivu-col-lg-offset-6{margin-left:25%}.ivu-col-lg-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-lg-5{display:block;width:20.83333333%}.ivu-col-lg-push-5{left:20.83333333%}.ivu-col-lg-pull-5{right:20.83333333%}.ivu-col-lg-offset-5{margin-left:20.83333333%}.ivu-col-lg-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-lg-4{display:block;width:16.66666667%}.ivu-col-lg-push-4{left:16.66666667%}.ivu-col-lg-pull-4{right:16.66666667%}.ivu-col-lg-offset-4{margin-left:16.66666667%}.ivu-col-lg-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-lg-3{display:block;width:12.5%}.ivu-col-lg-push-3{left:12.5%}.ivu-col-lg-pull-3{right:12.5%}.ivu-col-lg-offset-3{margin-left:12.5%}.ivu-col-lg-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-lg-2{display:block;width:8.33333333%}.ivu-col-lg-push-2{left:8.33333333%}.ivu-col-lg-pull-2{right:8.33333333%}.ivu-col-lg-offset-2{margin-left:8.33333333%}.ivu-col-lg-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-lg-1{display:block;width:4.16666667%}.ivu-col-lg-push-1{left:4.16666667%}.ivu-col-lg-pull-1{right:4.16666667%}.ivu-col-lg-offset-1{margin-left:4.16666667%}.ivu-col-lg-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-lg-0{display:none}.ivu-col-lg-push-0{left:auto}.ivu-col-lg-pull-0{right:auto}.ivu-col-lg-offset-0{margin-left:0}.ivu-col-lg-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1200px){.ivu-col-span-xl-1,.ivu-col-span-xl-10,.ivu-col-span-xl-11,.ivu-col-span-xl-12,.ivu-col-span-xl-13,.ivu-col-span-xl-14,.ivu-col-span-xl-15,.ivu-col-span-xl-16,.ivu-col-span-xl-17,.ivu-col-span-xl-18,.ivu-col-span-xl-19,.ivu-col-span-xl-2,.ivu-col-span-xl-20,.ivu-col-span-xl-21,.ivu-col-span-xl-22,.ivu-col-span-xl-23,.ivu-col-span-xl-24,.ivu-col-span-xl-3,.ivu-col-span-xl-4,.ivu-col-span-xl-5,.ivu-col-span-xl-6,.ivu-col-span-xl-7,.ivu-col-span-xl-8,.ivu-col-span-xl-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-xl-24{display:block;width:100%}.ivu-col-xl-push-24{left:100%}.ivu-col-xl-pull-24{right:100%}.ivu-col-xl-offset-24{margin-left:100%}.ivu-col-xl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-xl-23{display:block;width:95.83333333%}.ivu-col-xl-push-23{left:95.83333333%}.ivu-col-xl-pull-23{right:95.83333333%}.ivu-col-xl-offset-23{margin-left:95.83333333%}.ivu-col-xl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-xl-22{display:block;width:91.66666667%}.ivu-col-xl-push-22{left:91.66666667%}.ivu-col-xl-pull-22{right:91.66666667%}.ivu-col-xl-offset-22{margin-left:91.66666667%}.ivu-col-xl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-xl-21{display:block;width:87.5%}.ivu-col-xl-push-21{left:87.5%}.ivu-col-xl-pull-21{right:87.5%}.ivu-col-xl-offset-21{margin-left:87.5%}.ivu-col-xl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-xl-20{display:block;width:83.33333333%}.ivu-col-xl-push-20{left:83.33333333%}.ivu-col-xl-pull-20{right:83.33333333%}.ivu-col-xl-offset-20{margin-left:83.33333333%}.ivu-col-xl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-xl-19{display:block;width:79.16666667%}.ivu-col-xl-push-19{left:79.16666667%}.ivu-col-xl-pull-19{right:79.16666667%}.ivu-col-xl-offset-19{margin-left:79.16666667%}.ivu-col-xl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-xl-18{display:block;width:75%}.ivu-col-xl-push-18{left:75%}.ivu-col-xl-pull-18{right:75%}.ivu-col-xl-offset-18{margin-left:75%}.ivu-col-xl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-xl-17{display:block;width:70.83333333%}.ivu-col-xl-push-17{left:70.83333333%}.ivu-col-xl-pull-17{right:70.83333333%}.ivu-col-xl-offset-17{margin-left:70.83333333%}.ivu-col-xl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-xl-16{display:block;width:66.66666667%}.ivu-col-xl-push-16{left:66.66666667%}.ivu-col-xl-pull-16{right:66.66666667%}.ivu-col-xl-offset-16{margin-left:66.66666667%}.ivu-col-xl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-xl-15{display:block;width:62.5%}.ivu-col-xl-push-15{left:62.5%}.ivu-col-xl-pull-15{right:62.5%}.ivu-col-xl-offset-15{margin-left:62.5%}.ivu-col-xl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-xl-14{display:block;width:58.33333333%}.ivu-col-xl-push-14{left:58.33333333%}.ivu-col-xl-pull-14{right:58.33333333%}.ivu-col-xl-offset-14{margin-left:58.33333333%}.ivu-col-xl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-xl-13{display:block;width:54.16666667%}.ivu-col-xl-push-13{left:54.16666667%}.ivu-col-xl-pull-13{right:54.16666667%}.ivu-col-xl-offset-13{margin-left:54.16666667%}.ivu-col-xl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-xl-12{display:block;width:50%}.ivu-col-xl-push-12{left:50%}.ivu-col-xl-pull-12{right:50%}.ivu-col-xl-offset-12{margin-left:50%}.ivu-col-xl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-xl-11{display:block;width:45.83333333%}.ivu-col-xl-push-11{left:45.83333333%}.ivu-col-xl-pull-11{right:45.83333333%}.ivu-col-xl-offset-11{margin-left:45.83333333%}.ivu-col-xl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-xl-10{display:block;width:41.66666667%}.ivu-col-xl-push-10{left:41.66666667%}.ivu-col-xl-pull-10{right:41.66666667%}.ivu-col-xl-offset-10{margin-left:41.66666667%}.ivu-col-xl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-xl-9{display:block;width:37.5%}.ivu-col-xl-push-9{left:37.5%}.ivu-col-xl-pull-9{right:37.5%}.ivu-col-xl-offset-9{margin-left:37.5%}.ivu-col-xl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-xl-8{display:block;width:33.33333333%}.ivu-col-xl-push-8{left:33.33333333%}.ivu-col-xl-pull-8{right:33.33333333%}.ivu-col-xl-offset-8{margin-left:33.33333333%}.ivu-col-xl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-xl-7{display:block;width:29.16666667%}.ivu-col-xl-push-7{left:29.16666667%}.ivu-col-xl-pull-7{right:29.16666667%}.ivu-col-xl-offset-7{margin-left:29.16666667%}.ivu-col-xl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-xl-6{display:block;width:25%}.ivu-col-xl-push-6{left:25%}.ivu-col-xl-pull-6{right:25%}.ivu-col-xl-offset-6{margin-left:25%}.ivu-col-xl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-xl-5{display:block;width:20.83333333%}.ivu-col-xl-push-5{left:20.83333333%}.ivu-col-xl-pull-5{right:20.83333333%}.ivu-col-xl-offset-5{margin-left:20.83333333%}.ivu-col-xl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-xl-4{display:block;width:16.66666667%}.ivu-col-xl-push-4{left:16.66666667%}.ivu-col-xl-pull-4{right:16.66666667%}.ivu-col-xl-offset-4{margin-left:16.66666667%}.ivu-col-xl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-xl-3{display:block;width:12.5%}.ivu-col-xl-push-3{left:12.5%}.ivu-col-xl-pull-3{right:12.5%}.ivu-col-xl-offset-3{margin-left:12.5%}.ivu-col-xl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-xl-2{display:block;width:8.33333333%}.ivu-col-xl-push-2{left:8.33333333%}.ivu-col-xl-pull-2{right:8.33333333%}.ivu-col-xl-offset-2{margin-left:8.33333333%}.ivu-col-xl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-xl-1{display:block;width:4.16666667%}.ivu-col-xl-push-1{left:4.16666667%}.ivu-col-xl-pull-1{right:4.16666667%}.ivu-col-xl-offset-1{margin-left:4.16666667%}.ivu-col-xl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-xl-0{display:none}.ivu-col-xl-push-0{left:auto}.ivu-col-xl-pull-0{right:auto}.ivu-col-xl-offset-0{margin-left:0}.ivu-col-xl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}@media (min-width:1600px){.ivu-col-span-xxl-1,.ivu-col-span-xxl-10,.ivu-col-span-xxl-11,.ivu-col-span-xxl-12,.ivu-col-span-xxl-13,.ivu-col-span-xxl-14,.ivu-col-span-xxl-15,.ivu-col-span-xxl-16,.ivu-col-span-xxl-17,.ivu-col-span-xxl-18,.ivu-col-span-xxl-19,.ivu-col-span-xxl-2,.ivu-col-span-xxl-20,.ivu-col-span-xxl-21,.ivu-col-span-xxl-22,.ivu-col-span-xxl-23,.ivu-col-span-xxl-24,.ivu-col-span-xxl-3,.ivu-col-span-xxl-4,.ivu-col-span-xxl-5,.ivu-col-span-xxl-6,.ivu-col-span-xxl-7,.ivu-col-span-xxl-8,.ivu-col-span-xxl-9{float:left;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-col-span-xxl-24{display:block;width:100%}.ivu-col-xxl-push-24{left:100%}.ivu-col-xxl-pull-24{right:100%}.ivu-col-xxl-offset-24{margin-left:100%}.ivu-col-xxl-order-24{-webkit-box-ordinal-group:25;-ms-flex-order:24;order:24}.ivu-col-span-xxl-23{display:block;width:95.83333333%}.ivu-col-xxl-push-23{left:95.83333333%}.ivu-col-xxl-pull-23{right:95.83333333%}.ivu-col-xxl-offset-23{margin-left:95.83333333%}.ivu-col-xxl-order-23{-webkit-box-ordinal-group:24;-ms-flex-order:23;order:23}.ivu-col-span-xxl-22{display:block;width:91.66666667%}.ivu-col-xxl-push-22{left:91.66666667%}.ivu-col-xxl-pull-22{right:91.66666667%}.ivu-col-xxl-offset-22{margin-left:91.66666667%}.ivu-col-xxl-order-22{-webkit-box-ordinal-group:23;-ms-flex-order:22;order:22}.ivu-col-span-xxl-21{display:block;width:87.5%}.ivu-col-xxl-push-21{left:87.5%}.ivu-col-xxl-pull-21{right:87.5%}.ivu-col-xxl-offset-21{margin-left:87.5%}.ivu-col-xxl-order-21{-webkit-box-ordinal-group:22;-ms-flex-order:21;order:21}.ivu-col-span-xxl-20{display:block;width:83.33333333%}.ivu-col-xxl-push-20{left:83.33333333%}.ivu-col-xxl-pull-20{right:83.33333333%}.ivu-col-xxl-offset-20{margin-left:83.33333333%}.ivu-col-xxl-order-20{-webkit-box-ordinal-group:21;-ms-flex-order:20;order:20}.ivu-col-span-xxl-19{display:block;width:79.16666667%}.ivu-col-xxl-push-19{left:79.16666667%}.ivu-col-xxl-pull-19{right:79.16666667%}.ivu-col-xxl-offset-19{margin-left:79.16666667%}.ivu-col-xxl-order-19{-webkit-box-ordinal-group:20;-ms-flex-order:19;order:19}.ivu-col-span-xxl-18{display:block;width:75%}.ivu-col-xxl-push-18{left:75%}.ivu-col-xxl-pull-18{right:75%}.ivu-col-xxl-offset-18{margin-left:75%}.ivu-col-xxl-order-18{-webkit-box-ordinal-group:19;-ms-flex-order:18;order:18}.ivu-col-span-xxl-17{display:block;width:70.83333333%}.ivu-col-xxl-push-17{left:70.83333333%}.ivu-col-xxl-pull-17{right:70.83333333%}.ivu-col-xxl-offset-17{margin-left:70.83333333%}.ivu-col-xxl-order-17{-webkit-box-ordinal-group:18;-ms-flex-order:17;order:17}.ivu-col-span-xxl-16{display:block;width:66.66666667%}.ivu-col-xxl-push-16{left:66.66666667%}.ivu-col-xxl-pull-16{right:66.66666667%}.ivu-col-xxl-offset-16{margin-left:66.66666667%}.ivu-col-xxl-order-16{-webkit-box-ordinal-group:17;-ms-flex-order:16;order:16}.ivu-col-span-xxl-15{display:block;width:62.5%}.ivu-col-xxl-push-15{left:62.5%}.ivu-col-xxl-pull-15{right:62.5%}.ivu-col-xxl-offset-15{margin-left:62.5%}.ivu-col-xxl-order-15{-webkit-box-ordinal-group:16;-ms-flex-order:15;order:15}.ivu-col-span-xxl-14{display:block;width:58.33333333%}.ivu-col-xxl-push-14{left:58.33333333%}.ivu-col-xxl-pull-14{right:58.33333333%}.ivu-col-xxl-offset-14{margin-left:58.33333333%}.ivu-col-xxl-order-14{-webkit-box-ordinal-group:15;-ms-flex-order:14;order:14}.ivu-col-span-xxl-13{display:block;width:54.16666667%}.ivu-col-xxl-push-13{left:54.16666667%}.ivu-col-xxl-pull-13{right:54.16666667%}.ivu-col-xxl-offset-13{margin-left:54.16666667%}.ivu-col-xxl-order-13{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.ivu-col-span-xxl-12{display:block;width:50%}.ivu-col-xxl-push-12{left:50%}.ivu-col-xxl-pull-12{right:50%}.ivu-col-xxl-offset-12{margin-left:50%}.ivu-col-xxl-order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.ivu-col-span-xxl-11{display:block;width:45.83333333%}.ivu-col-xxl-push-11{left:45.83333333%}.ivu-col-xxl-pull-11{right:45.83333333%}.ivu-col-xxl-offset-11{margin-left:45.83333333%}.ivu-col-xxl-order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.ivu-col-span-xxl-10{display:block;width:41.66666667%}.ivu-col-xxl-push-10{left:41.66666667%}.ivu-col-xxl-pull-10{right:41.66666667%}.ivu-col-xxl-offset-10{margin-left:41.66666667%}.ivu-col-xxl-order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.ivu-col-span-xxl-9{display:block;width:37.5%}.ivu-col-xxl-push-9{left:37.5%}.ivu-col-xxl-pull-9{right:37.5%}.ivu-col-xxl-offset-9{margin-left:37.5%}.ivu-col-xxl-order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.ivu-col-span-xxl-8{display:block;width:33.33333333%}.ivu-col-xxl-push-8{left:33.33333333%}.ivu-col-xxl-pull-8{right:33.33333333%}.ivu-col-xxl-offset-8{margin-left:33.33333333%}.ivu-col-xxl-order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.ivu-col-span-xxl-7{display:block;width:29.16666667%}.ivu-col-xxl-push-7{left:29.16666667%}.ivu-col-xxl-pull-7{right:29.16666667%}.ivu-col-xxl-offset-7{margin-left:29.16666667%}.ivu-col-xxl-order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.ivu-col-span-xxl-6{display:block;width:25%}.ivu-col-xxl-push-6{left:25%}.ivu-col-xxl-pull-6{right:25%}.ivu-col-xxl-offset-6{margin-left:25%}.ivu-col-xxl-order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.ivu-col-span-xxl-5{display:block;width:20.83333333%}.ivu-col-xxl-push-5{left:20.83333333%}.ivu-col-xxl-pull-5{right:20.83333333%}.ivu-col-xxl-offset-5{margin-left:20.83333333%}.ivu-col-xxl-order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.ivu-col-span-xxl-4{display:block;width:16.66666667%}.ivu-col-xxl-push-4{left:16.66666667%}.ivu-col-xxl-pull-4{right:16.66666667%}.ivu-col-xxl-offset-4{margin-left:16.66666667%}.ivu-col-xxl-order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.ivu-col-span-xxl-3{display:block;width:12.5%}.ivu-col-xxl-push-3{left:12.5%}.ivu-col-xxl-pull-3{right:12.5%}.ivu-col-xxl-offset-3{margin-left:12.5%}.ivu-col-xxl-order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.ivu-col-span-xxl-2{display:block;width:8.33333333%}.ivu-col-xxl-push-2{left:8.33333333%}.ivu-col-xxl-pull-2{right:8.33333333%}.ivu-col-xxl-offset-2{margin-left:8.33333333%}.ivu-col-xxl-order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.ivu-col-span-xxl-1{display:block;width:4.16666667%}.ivu-col-xxl-push-1{left:4.16666667%}.ivu-col-xxl-pull-1{right:4.16666667%}.ivu-col-xxl-offset-1{margin-left:4.16666667%}.ivu-col-xxl-order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.ivu-col-span-xxl-0{display:none}.ivu-col-xxl-push-0{left:auto}.ivu-col-xxl-pull-0{right:auto}.ivu-col-xxl-offset-0{margin-left:0}.ivu-col-xxl-order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}}.ivu-article h1{font-size:26px;font-weight:400}.ivu-article h2{font-size:20px;font-weight:400}.ivu-article h3{font-size:16px;font-weight:400}.ivu-article h4{font-size:14px;font-weight:400}.ivu-article h5{font-size:12px;font-weight:400}.ivu-article h6{font-size:12px;font-weight:400}.ivu-article blockquote{padding:5px 5px 3px 10px;line-height:1.5;border-left:4px solid #ddd;margin-bottom:20px;color:#666;font-size:14px}.ivu-article ul:not([class^=ivu-]){padding-left:40px;list-style-type:disc}.ivu-article li:not([class^=ivu-]){margin-bottom:5px;font-size:14px}.ivu-article ol ul:not([class^=ivu-]),.ivu-article ul ul:not([class^=ivu-]){list-style-type:circle}.ivu-article p{margin:5px;font-size:14px}.ivu-article a:not([class^=ivu-])[target="_blank"]:after{content:"\F3F2";font-family:Ionicons;color:#aaa;margin-left:3px}.fade-appear,.fade-enter-active{-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-leave-active{-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear,.fade-enter-active{-webkit-animation-name:ivuFadeIn;animation-name:ivuFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave-active{-webkit-animation-name:ivuFadeOut;animation-name:ivuFadeOut;-webkit-animation-play-state:running;animation-play-state:running}.fade-appear,.fade-enter-active{opacity:0;-webkit-animation-timing-function:linear;animation-timing-function:linear}.fade-leave-active{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes ivuFadeIn{0%{opacity:0}100%{opacity:1}}@keyframes ivuFadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes ivuFadeOut{0%{opacity:1}100%{opacity:0}}@keyframes ivuFadeOut{0%{opacity:1}100%{opacity:0}}.move-up-appear,.move-up-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear,.move-up-enter-active{-webkit-animation-name:ivuMoveUpIn;animation-name:ivuMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave-active{-webkit-animation-name:ivuMoveUpOut;animation-name:ivuMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running}.move-up-appear,.move-up-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-up-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-down-appear,.move-down-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear,.move-down-enter-active{-webkit-animation-name:ivuMoveDownIn;animation-name:ivuMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave-active{-webkit-animation-name:ivuMoveDownOut;animation-name:ivuMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running}.move-down-appear,.move-down-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-down-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-left-appear,.move-left-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear,.move-left-enter-active{-webkit-animation-name:ivuMoveLeftIn;animation-name:ivuMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave-active{-webkit-animation-name:ivuMoveLeftOut;animation-name:ivuMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running}.move-left-appear,.move-left-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-left-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-right-appear,.move-right-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear,.move-right-enter-active{-webkit-animation-name:ivuMoveRightIn;animation-name:ivuMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave-active{-webkit-animation-name:ivuMoveRightOut;animation-name:ivuMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running}.move-right-appear,.move-right-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-right-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes ivuMoveDownIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes ivuMoveDownIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes ivuMoveDownOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}}@keyframes ivuMoveDownOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}}@-webkit-keyframes ivuMoveLeftIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@keyframes ivuMoveLeftIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@-webkit-keyframes ivuMoveLeftOut{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 ivuMoveLeftOut{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 ivuMoveRightIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes ivuMoveRightIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes ivuMoveRightOut{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 ivuMoveRightOut{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 ivuMoveUpIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes ivuMoveUpIn{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes ivuMoveUpOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}}@keyframes ivuMoveUpOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(0);transform:translateY(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateY(-100%);transform:translateY(-100%);opacity:0}}.move-notice-appear,.move-notice-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-notice-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-notice-appear,.move-notice-enter-active{-webkit-animation-name:ivuMoveNoticeIn;animation-name:ivuMoveNoticeIn;-webkit-animation-play-state:running;animation-play-state:running}.move-notice-leave-active{-webkit-animation-name:ivuMoveNoticeOut;animation-name:ivuMoveNoticeOut;-webkit-animation-play-state:running;animation-play-state:running}.move-notice-appear,.move-notice-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.move-notice-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes ivuMoveNoticeIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes ivuMoveNoticeIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes ivuMoveNoticeOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}70%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);height:auto;padding:16px;margin-bottom:10px;opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);height:0;padding:0;margin-bottom:0;opacity:0}}@keyframes ivuMoveNoticeOut{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}70%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);height:auto;padding:16px;margin-bottom:10px;opacity:0}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);height:0;padding:0;margin-bottom:0;opacity:0}}.ease-appear,.ease-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ease-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ease-appear,.ease-enter-active{-webkit-animation-name:ivuEaseIn;animation-name:ivuEaseIn;-webkit-animation-play-state:running;animation-play-state:running}.ease-leave-active{-webkit-animation-name:ivuEaseOut;animation-name:ivuEaseOut;-webkit-animation-play-state:running;animation-play-state:running}.ease-appear,.ease-enter-active{opacity:0;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}.ease-leave-active{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes ivuEaseIn{0%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes ivuEaseIn{0%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ivuEaseOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}}@keyframes ivuEaseOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}}.transition-drop-appear,.transition-drop-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.transition-drop-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.transition-drop-appear,.transition-drop-enter-active{-webkit-animation-name:ivuTransitionDropIn;animation-name:ivuTransitionDropIn;-webkit-animation-play-state:running;animation-play-state:running}.transition-drop-leave-active{-webkit-animation-name:ivuTransitionDropOut;animation-name:ivuTransitionDropOut;-webkit-animation-play-state:running;animation-play-state:running}.transition-drop-appear,.transition-drop-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.transition-drop-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-up-appear,.slide-up-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear,.slide-up-enter-active{-webkit-animation-name:ivuSlideUpIn;animation-name:ivuSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave-active{-webkit-animation-name:ivuSlideUpOut;animation-name:ivuSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-appear,.slide-up-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-up-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-down-appear,.slide-down-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear,.slide-down-enter-active{-webkit-animation-name:ivuSlideDownIn;animation-name:ivuSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave-active{-webkit-animation-name:ivuSlideDownOut;animation-name:ivuSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-appear,.slide-down-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-down-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-left-appear,.slide-left-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear,.slide-left-enter-active{-webkit-animation-name:ivuSlideLeftIn;animation-name:ivuSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave-active{-webkit-animation-name:ivuSlideLeftOut;animation-name:ivuSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-appear,.slide-left-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-left-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-right-appear,.slide-right-enter-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-leave-active{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear,.slide-right-enter-active{-webkit-animation-name:ivuSlideRightIn;animation-name:ivuSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave-active{-webkit-animation-name:ivuSlideRightOut;animation-name:ivuSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-appear,.slide-right-enter-active{opacity:0;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.slide-right-leave-active{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes ivuTransitionDropIn{0%{opacity:0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes ivuTransitionDropIn{0%{opacity:0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes ivuTransitionDropOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@keyframes ivuTransitionDropOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@-webkit-keyframes ivuSlideUpIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes ivuSlideUpIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes ivuSlideUpOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@keyframes ivuSlideUpOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@-webkit-keyframes ivuSlideDownIn{0%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes ivuSlideDownIn{0%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}100%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes ivuSlideDownOut{0%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@keyframes ivuSlideDownOut{0%{opacity:1;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:scaleY(.8);transform:scaleY(.8)}}@-webkit-keyframes ivuSlideLeftIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes ivuSlideLeftIn{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}100%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes ivuSlideLeftOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@keyframes ivuSlideLeftOut{0%{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@-webkit-keyframes ivuSlideRightIn{0%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}100%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes ivuSlideRightIn{0%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}100%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes ivuSlideRightOut{0%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}@keyframes ivuSlideRightOut{0%{opacity:1;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.8);transform:scaleX(.8)}}.collapse-transition{-webkit-transition:.2s height ease-in-out,.2s padding-top ease-in-out,.2s padding-bottom ease-in-out;transition:.2s height ease-in-out,.2s padding-top ease-in-out,.2s padding-bottom ease-in-out}.ivu-btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:5px 15px 6px;font-size:12px;border-radius:4px;-webkit-transition:color .2s linear,background-color .2s linear,border .2s linear,-webkit-box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,-webkit-box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,box-shadow .2s linear,-webkit-box-shadow .2s linear;color:#515a6e;background-color:#fff;border-color:#dcdee2}.ivu-btn>.ivu-icon{line-height:1.5;vertical-align:middle}.ivu-btn-icon-only.ivu-btn-circle>.ivu-icon{vertical-align:baseline}.ivu-btn>span{vertical-align:middle}.ivu-btn,.ivu-btn:active,.ivu-btn:focus{outline:0}.ivu-btn:not([disabled]):hover{text-decoration:none}.ivu-btn:not([disabled]):active{outline:0}.ivu-btn.disabled,.ivu-btn[disabled]{cursor:not-allowed}.ivu-btn.disabled>*,.ivu-btn[disabled]>*{pointer-events:none}.ivu-btn-large{padding:6px 15px 6px 15px;font-size:14px;border-radius:4px}.ivu-btn-small{padding:1px 7px 2px;font-size:12px;border-radius:3px}.ivu-btn-icon-only{padding:5px 15px 6px;font-size:12px;border-radius:4px}.ivu-btn-icon-only.ivu-btn-small{padding:1px 7px 2px;font-size:12px;border-radius:3px}.ivu-btn-icon-only.ivu-btn-large{padding:6px 15px 6px 15px;font-size:14px;border-radius:4px}.ivu-btn>a:only-child{color:currentColor}.ivu-btn>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn:hover{color:#747b8b;background-color:#fff;border-color:#e3e5e8}.ivu-btn:hover>a:only-child{color:currentColor}.ivu-btn:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn.active,.ivu-btn:active{color:#4d5669;background-color:#f2f2f2;border-color:#f2f2f2}.ivu-btn.active>a:only-child,.ivu-btn:active>a:only-child{color:currentColor}.ivu-btn.active>a:only-child:after,.ivu-btn:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn.disabled,.ivu-btn.disabled.active,.ivu-btn.disabled:active,.ivu-btn.disabled:focus,.ivu-btn.disabled:hover,.ivu-btn[disabled],.ivu-btn[disabled].active,.ivu-btn[disabled]:active,.ivu-btn[disabled]:focus,.ivu-btn[disabled]:hover,fieldset[disabled] .ivu-btn,fieldset[disabled] .ivu-btn.active,fieldset[disabled] .ivu-btn:active,fieldset[disabled] .ivu-btn:focus,fieldset[disabled] .ivu-btn:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn.disabled.active>a:only-child,.ivu-btn.disabled:active>a:only-child,.ivu-btn.disabled:focus>a:only-child,.ivu-btn.disabled:hover>a:only-child,.ivu-btn.disabled>a:only-child,.ivu-btn[disabled].active>a:only-child,.ivu-btn[disabled]:active>a:only-child,.ivu-btn[disabled]:focus>a:only-child,.ivu-btn[disabled]:hover>a:only-child,.ivu-btn[disabled]>a:only-child,fieldset[disabled] .ivu-btn.active>a:only-child,fieldset[disabled] .ivu-btn:active>a:only-child,fieldset[disabled] .ivu-btn:focus>a:only-child,fieldset[disabled] .ivu-btn:hover>a:only-child,fieldset[disabled] .ivu-btn>a:only-child{color:currentColor}.ivu-btn.disabled.active>a:only-child:after,.ivu-btn.disabled:active>a:only-child:after,.ivu-btn.disabled:focus>a:only-child:after,.ivu-btn.disabled:hover>a:only-child:after,.ivu-btn.disabled>a:only-child:after,.ivu-btn[disabled].active>a:only-child:after,.ivu-btn[disabled]:active>a:only-child:after,.ivu-btn[disabled]:focus>a:only-child:after,.ivu-btn[disabled]:hover>a:only-child:after,.ivu-btn[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn.active>a:only-child:after,fieldset[disabled] .ivu-btn:active>a:only-child:after,fieldset[disabled] .ivu-btn:focus>a:only-child:after,fieldset[disabled] .ivu-btn:hover>a:only-child:after,fieldset[disabled] .ivu-btn>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn:hover{color:#57a3f3;background-color:#fff;border-color:#57a3f3}.ivu-btn:hover>a:only-child{color:currentColor}.ivu-btn:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn.active,.ivu-btn:active{color:#2b85e4;background-color:#fff;border-color:#2b85e4}.ivu-btn.active>a:only-child,.ivu-btn:active>a:only-child{color:currentColor}.ivu-btn.active>a:only-child:after,.ivu-btn:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-btn-long{width:100%}.ivu-btn>.ivu-icon+span,.ivu-btn>span+.ivu-icon{margin-left:4px}.ivu-btn-primary{color:#fff;background-color:#2d8cf0;border-color:#2d8cf0}.ivu-btn-primary>a:only-child{color:currentColor}.ivu-btn-primary>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-primary:hover{color:#fff;background-color:#57a3f3;border-color:#57a3f3}.ivu-btn-primary:hover>a:only-child{color:currentColor}.ivu-btn-primary:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-primary.active,.ivu-btn-primary:active{color:#f2f2f2;background-color:#2b85e4;border-color:#2b85e4}.ivu-btn-primary.active>a:only-child,.ivu-btn-primary:active>a:only-child{color:currentColor}.ivu-btn-primary.active>a:only-child:after,.ivu-btn-primary:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-primary.disabled,.ivu-btn-primary.disabled.active,.ivu-btn-primary.disabled:active,.ivu-btn-primary.disabled:focus,.ivu-btn-primary.disabled:hover,.ivu-btn-primary[disabled],.ivu-btn-primary[disabled].active,.ivu-btn-primary[disabled]:active,.ivu-btn-primary[disabled]:focus,.ivu-btn-primary[disabled]:hover,fieldset[disabled] .ivu-btn-primary,fieldset[disabled] .ivu-btn-primary.active,fieldset[disabled] .ivu-btn-primary:active,fieldset[disabled] .ivu-btn-primary:focus,fieldset[disabled] .ivu-btn-primary:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-primary.disabled.active>a:only-child,.ivu-btn-primary.disabled:active>a:only-child,.ivu-btn-primary.disabled:focus>a:only-child,.ivu-btn-primary.disabled:hover>a:only-child,.ivu-btn-primary.disabled>a:only-child,.ivu-btn-primary[disabled].active>a:only-child,.ivu-btn-primary[disabled]:active>a:only-child,.ivu-btn-primary[disabled]:focus>a:only-child,.ivu-btn-primary[disabled]:hover>a:only-child,.ivu-btn-primary[disabled]>a:only-child,fieldset[disabled] .ivu-btn-primary.active>a:only-child,fieldset[disabled] .ivu-btn-primary:active>a:only-child,fieldset[disabled] .ivu-btn-primary:focus>a:only-child,fieldset[disabled] .ivu-btn-primary:hover>a:only-child,fieldset[disabled] .ivu-btn-primary>a:only-child{color:currentColor}.ivu-btn-primary.disabled.active>a:only-child:after,.ivu-btn-primary.disabled:active>a:only-child:after,.ivu-btn-primary.disabled:focus>a:only-child:after,.ivu-btn-primary.disabled:hover>a:only-child:after,.ivu-btn-primary.disabled>a:only-child:after,.ivu-btn-primary[disabled].active>a:only-child:after,.ivu-btn-primary[disabled]:active>a:only-child:after,.ivu-btn-primary[disabled]:focus>a:only-child:after,.ivu-btn-primary[disabled]:hover>a:only-child:after,.ivu-btn-primary[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-primary.active>a:only-child:after,fieldset[disabled] .ivu-btn-primary:active>a:only-child:after,fieldset[disabled] .ivu-btn-primary:focus>a:only-child:after,fieldset[disabled] .ivu-btn-primary:hover>a:only-child:after,fieldset[disabled] .ivu-btn-primary>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-primary.active,.ivu-btn-primary:active,.ivu-btn-primary:hover{color:#fff}.ivu-btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary:not(:first-child):not(:last-child){border-right-color:#2b85e4;border-left-color:#2b85e4}.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary:first-child:not(:last-child){border-right-color:#2b85e4}.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#dcdee2}.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary+.ivu-btn,.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary:last-child:not(:first-child){border-left-color:#2b85e4}.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary+.ivu-btn[disabled],.ivu-btn-group:not(.ivu-btn-group-vertical) .ivu-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#dcdee2}.ivu-btn-group-vertical .ivu-btn-primary:not(:first-child):not(:last-child){border-top-color:#2b85e4;border-bottom-color:#2b85e4}.ivu-btn-group-vertical .ivu-btn-primary:first-child:not(:last-child){border-bottom-color:#2b85e4}.ivu-btn-group-vertical .ivu-btn-primary:first-child:not(:last-child)[disabled]{border-top-color:#dcdee2}.ivu-btn-group-vertical .ivu-btn-primary+.ivu-btn,.ivu-btn-group-vertical .ivu-btn-primary:last-child:not(:first-child){border-top-color:#2b85e4}.ivu-btn-group-vertical .ivu-btn-primary+.ivu-btn[disabled],.ivu-btn-group-vertical .ivu-btn-primary:last-child:not(:first-child)[disabled]{border-bottom-color:#dcdee2}.ivu-btn-dashed{color:#515a6e;background-color:#fff;border-color:#dcdee2;border-style:dashed}.ivu-btn-dashed>a:only-child{color:currentColor}.ivu-btn-dashed>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed:hover{color:#747b8b;background-color:#fff;border-color:#e3e5e8}.ivu-btn-dashed:hover>a:only-child{color:currentColor}.ivu-btn-dashed:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed.active,.ivu-btn-dashed:active{color:#4d5669;background-color:#f2f2f2;border-color:#f2f2f2}.ivu-btn-dashed.active>a:only-child,.ivu-btn-dashed:active>a:only-child{color:currentColor}.ivu-btn-dashed.active>a:only-child:after,.ivu-btn-dashed:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed.disabled,.ivu-btn-dashed.disabled.active,.ivu-btn-dashed.disabled:active,.ivu-btn-dashed.disabled:focus,.ivu-btn-dashed.disabled:hover,.ivu-btn-dashed[disabled],.ivu-btn-dashed[disabled].active,.ivu-btn-dashed[disabled]:active,.ivu-btn-dashed[disabled]:focus,.ivu-btn-dashed[disabled]:hover,fieldset[disabled] .ivu-btn-dashed,fieldset[disabled] .ivu-btn-dashed.active,fieldset[disabled] .ivu-btn-dashed:active,fieldset[disabled] .ivu-btn-dashed:focus,fieldset[disabled] .ivu-btn-dashed:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-dashed.disabled.active>a:only-child,.ivu-btn-dashed.disabled:active>a:only-child,.ivu-btn-dashed.disabled:focus>a:only-child,.ivu-btn-dashed.disabled:hover>a:only-child,.ivu-btn-dashed.disabled>a:only-child,.ivu-btn-dashed[disabled].active>a:only-child,.ivu-btn-dashed[disabled]:active>a:only-child,.ivu-btn-dashed[disabled]:focus>a:only-child,.ivu-btn-dashed[disabled]:hover>a:only-child,.ivu-btn-dashed[disabled]>a:only-child,fieldset[disabled] .ivu-btn-dashed.active>a:only-child,fieldset[disabled] .ivu-btn-dashed:active>a:only-child,fieldset[disabled] .ivu-btn-dashed:focus>a:only-child,fieldset[disabled] .ivu-btn-dashed:hover>a:only-child,fieldset[disabled] .ivu-btn-dashed>a:only-child{color:currentColor}.ivu-btn-dashed.disabled.active>a:only-child:after,.ivu-btn-dashed.disabled:active>a:only-child:after,.ivu-btn-dashed.disabled:focus>a:only-child:after,.ivu-btn-dashed.disabled:hover>a:only-child:after,.ivu-btn-dashed.disabled>a:only-child:after,.ivu-btn-dashed[disabled].active>a:only-child:after,.ivu-btn-dashed[disabled]:active>a:only-child:after,.ivu-btn-dashed[disabled]:focus>a:only-child:after,.ivu-btn-dashed[disabled]:hover>a:only-child:after,.ivu-btn-dashed[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-dashed.active>a:only-child:after,fieldset[disabled] .ivu-btn-dashed:active>a:only-child:after,fieldset[disabled] .ivu-btn-dashed:focus>a:only-child:after,fieldset[disabled] .ivu-btn-dashed:hover>a:only-child:after,fieldset[disabled] .ivu-btn-dashed>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed:hover{color:#57a3f3;background-color:#fff;border-color:#57a3f3}.ivu-btn-dashed:hover>a:only-child{color:currentColor}.ivu-btn-dashed:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed.active,.ivu-btn-dashed:active{color:#2b85e4;background-color:#fff;border-color:#2b85e4}.ivu-btn-dashed.active>a:only-child,.ivu-btn-dashed:active>a:only-child{color:currentColor}.ivu-btn-dashed.active>a:only-child:after,.ivu-btn-dashed:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-dashed:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-btn-text{color:#515a6e;background-color:transparent;border-color:transparent}.ivu-btn-text>a:only-child{color:currentColor}.ivu-btn-text>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text:hover{color:#747b8b;background-color:rgba(255,255,255,.2);border-color:rgba(255,255,255,.2)}.ivu-btn-text:hover>a:only-child{color:currentColor}.ivu-btn-text:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text.active,.ivu-btn-text:active{color:#4d5669;background-color:rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.ivu-btn-text.active>a:only-child,.ivu-btn-text:active>a:only-child{color:currentColor}.ivu-btn-text.active>a:only-child:after,.ivu-btn-text:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text.disabled,.ivu-btn-text.disabled.active,.ivu-btn-text.disabled:active,.ivu-btn-text.disabled:focus,.ivu-btn-text.disabled:hover,.ivu-btn-text[disabled],.ivu-btn-text[disabled].active,.ivu-btn-text[disabled]:active,.ivu-btn-text[disabled]:focus,.ivu-btn-text[disabled]:hover,fieldset[disabled] .ivu-btn-text,fieldset[disabled] .ivu-btn-text.active,fieldset[disabled] .ivu-btn-text:active,fieldset[disabled] .ivu-btn-text:focus,fieldset[disabled] .ivu-btn-text:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-text.disabled.active>a:only-child,.ivu-btn-text.disabled:active>a:only-child,.ivu-btn-text.disabled:focus>a:only-child,.ivu-btn-text.disabled:hover>a:only-child,.ivu-btn-text.disabled>a:only-child,.ivu-btn-text[disabled].active>a:only-child,.ivu-btn-text[disabled]:active>a:only-child,.ivu-btn-text[disabled]:focus>a:only-child,.ivu-btn-text[disabled]:hover>a:only-child,.ivu-btn-text[disabled]>a:only-child,fieldset[disabled] .ivu-btn-text.active>a:only-child,fieldset[disabled] .ivu-btn-text:active>a:only-child,fieldset[disabled] .ivu-btn-text:focus>a:only-child,fieldset[disabled] .ivu-btn-text:hover>a:only-child,fieldset[disabled] .ivu-btn-text>a:only-child{color:currentColor}.ivu-btn-text.disabled.active>a:only-child:after,.ivu-btn-text.disabled:active>a:only-child:after,.ivu-btn-text.disabled:focus>a:only-child:after,.ivu-btn-text.disabled:hover>a:only-child:after,.ivu-btn-text.disabled>a:only-child:after,.ivu-btn-text[disabled].active>a:only-child:after,.ivu-btn-text[disabled]:active>a:only-child:after,.ivu-btn-text[disabled]:focus>a:only-child:after,.ivu-btn-text[disabled]:hover>a:only-child:after,.ivu-btn-text[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-text.active>a:only-child:after,fieldset[disabled] .ivu-btn-text:active>a:only-child:after,fieldset[disabled] .ivu-btn-text:focus>a:only-child:after,fieldset[disabled] .ivu-btn-text:hover>a:only-child:after,fieldset[disabled] .ivu-btn-text>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text.disabled,.ivu-btn-text.disabled.active,.ivu-btn-text.disabled:active,.ivu-btn-text.disabled:focus,.ivu-btn-text.disabled:hover,.ivu-btn-text[disabled],.ivu-btn-text[disabled].active,.ivu-btn-text[disabled]:active,.ivu-btn-text[disabled]:focus,.ivu-btn-text[disabled]:hover,fieldset[disabled] .ivu-btn-text,fieldset[disabled] .ivu-btn-text.active,fieldset[disabled] .ivu-btn-text:active,fieldset[disabled] .ivu-btn-text:focus,fieldset[disabled] .ivu-btn-text:hover{color:#c5c8ce;background-color:#fff;border-color:transparent}.ivu-btn-text.disabled.active>a:only-child,.ivu-btn-text.disabled:active>a:only-child,.ivu-btn-text.disabled:focus>a:only-child,.ivu-btn-text.disabled:hover>a:only-child,.ivu-btn-text.disabled>a:only-child,.ivu-btn-text[disabled].active>a:only-child,.ivu-btn-text[disabled]:active>a:only-child,.ivu-btn-text[disabled]:focus>a:only-child,.ivu-btn-text[disabled]:hover>a:only-child,.ivu-btn-text[disabled]>a:only-child,fieldset[disabled] .ivu-btn-text.active>a:only-child,fieldset[disabled] .ivu-btn-text:active>a:only-child,fieldset[disabled] .ivu-btn-text:focus>a:only-child,fieldset[disabled] .ivu-btn-text:hover>a:only-child,fieldset[disabled] .ivu-btn-text>a:only-child{color:currentColor}.ivu-btn-text.disabled.active>a:only-child:after,.ivu-btn-text.disabled:active>a:only-child:after,.ivu-btn-text.disabled:focus>a:only-child:after,.ivu-btn-text.disabled:hover>a:only-child:after,.ivu-btn-text.disabled>a:only-child:after,.ivu-btn-text[disabled].active>a:only-child:after,.ivu-btn-text[disabled]:active>a:only-child:after,.ivu-btn-text[disabled]:focus>a:only-child:after,.ivu-btn-text[disabled]:hover>a:only-child:after,.ivu-btn-text[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-text.active>a:only-child:after,fieldset[disabled] .ivu-btn-text:active>a:only-child:after,fieldset[disabled] .ivu-btn-text:focus>a:only-child:after,fieldset[disabled] .ivu-btn-text:hover>a:only-child:after,fieldset[disabled] .ivu-btn-text>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text:hover{color:#57a3f3;background-color:#fff;border-color:transparent}.ivu-btn-text:hover>a:only-child{color:currentColor}.ivu-btn-text:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text.active,.ivu-btn-text:active{color:#2b85e4;background-color:#fff;border-color:transparent}.ivu-btn-text.active>a:only-child,.ivu-btn-text:active>a:only-child{color:currentColor}.ivu-btn-text.active>a:only-child:after,.ivu-btn-text:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-text:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-btn-success{color:#fff;background-color:#19be6b;border-color:#19be6b}.ivu-btn-success>a:only-child{color:currentColor}.ivu-btn-success>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-success:hover{color:#fff;background-color:#47cb89;border-color:#47cb89}.ivu-btn-success:hover>a:only-child{color:currentColor}.ivu-btn-success:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-success.active,.ivu-btn-success:active{color:#f2f2f2;background-color:#18b566;border-color:#18b566}.ivu-btn-success.active>a:only-child,.ivu-btn-success:active>a:only-child{color:currentColor}.ivu-btn-success.active>a:only-child:after,.ivu-btn-success:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-success.disabled,.ivu-btn-success.disabled.active,.ivu-btn-success.disabled:active,.ivu-btn-success.disabled:focus,.ivu-btn-success.disabled:hover,.ivu-btn-success[disabled],.ivu-btn-success[disabled].active,.ivu-btn-success[disabled]:active,.ivu-btn-success[disabled]:focus,.ivu-btn-success[disabled]:hover,fieldset[disabled] .ivu-btn-success,fieldset[disabled] .ivu-btn-success.active,fieldset[disabled] .ivu-btn-success:active,fieldset[disabled] .ivu-btn-success:focus,fieldset[disabled] .ivu-btn-success:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-success.disabled.active>a:only-child,.ivu-btn-success.disabled:active>a:only-child,.ivu-btn-success.disabled:focus>a:only-child,.ivu-btn-success.disabled:hover>a:only-child,.ivu-btn-success.disabled>a:only-child,.ivu-btn-success[disabled].active>a:only-child,.ivu-btn-success[disabled]:active>a:only-child,.ivu-btn-success[disabled]:focus>a:only-child,.ivu-btn-success[disabled]:hover>a:only-child,.ivu-btn-success[disabled]>a:only-child,fieldset[disabled] .ivu-btn-success.active>a:only-child,fieldset[disabled] .ivu-btn-success:active>a:only-child,fieldset[disabled] .ivu-btn-success:focus>a:only-child,fieldset[disabled] .ivu-btn-success:hover>a:only-child,fieldset[disabled] .ivu-btn-success>a:only-child{color:currentColor}.ivu-btn-success.disabled.active>a:only-child:after,.ivu-btn-success.disabled:active>a:only-child:after,.ivu-btn-success.disabled:focus>a:only-child:after,.ivu-btn-success.disabled:hover>a:only-child:after,.ivu-btn-success.disabled>a:only-child:after,.ivu-btn-success[disabled].active>a:only-child:after,.ivu-btn-success[disabled]:active>a:only-child:after,.ivu-btn-success[disabled]:focus>a:only-child:after,.ivu-btn-success[disabled]:hover>a:only-child:after,.ivu-btn-success[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-success.active>a:only-child:after,fieldset[disabled] .ivu-btn-success:active>a:only-child:after,fieldset[disabled] .ivu-btn-success:focus>a:only-child:after,fieldset[disabled] .ivu-btn-success:hover>a:only-child:after,fieldset[disabled] .ivu-btn-success>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-success.active,.ivu-btn-success:active,.ivu-btn-success:hover{color:#fff}.ivu-btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(25,190,107,.2);box-shadow:0 0 0 2px rgba(25,190,107,.2)}.ivu-btn-warning{color:#fff;background-color:#f90;border-color:#f90}.ivu-btn-warning>a:only-child{color:currentColor}.ivu-btn-warning>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-warning:hover{color:#fff;background-color:#ffad33;border-color:#ffad33}.ivu-btn-warning:hover>a:only-child{color:currentColor}.ivu-btn-warning:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-warning.active,.ivu-btn-warning:active{color:#f2f2f2;background-color:#f29100;border-color:#f29100}.ivu-btn-warning.active>a:only-child,.ivu-btn-warning:active>a:only-child{color:currentColor}.ivu-btn-warning.active>a:only-child:after,.ivu-btn-warning:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-warning.disabled,.ivu-btn-warning.disabled.active,.ivu-btn-warning.disabled:active,.ivu-btn-warning.disabled:focus,.ivu-btn-warning.disabled:hover,.ivu-btn-warning[disabled],.ivu-btn-warning[disabled].active,.ivu-btn-warning[disabled]:active,.ivu-btn-warning[disabled]:focus,.ivu-btn-warning[disabled]:hover,fieldset[disabled] .ivu-btn-warning,fieldset[disabled] .ivu-btn-warning.active,fieldset[disabled] .ivu-btn-warning:active,fieldset[disabled] .ivu-btn-warning:focus,fieldset[disabled] .ivu-btn-warning:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-warning.disabled.active>a:only-child,.ivu-btn-warning.disabled:active>a:only-child,.ivu-btn-warning.disabled:focus>a:only-child,.ivu-btn-warning.disabled:hover>a:only-child,.ivu-btn-warning.disabled>a:only-child,.ivu-btn-warning[disabled].active>a:only-child,.ivu-btn-warning[disabled]:active>a:only-child,.ivu-btn-warning[disabled]:focus>a:only-child,.ivu-btn-warning[disabled]:hover>a:only-child,.ivu-btn-warning[disabled]>a:only-child,fieldset[disabled] .ivu-btn-warning.active>a:only-child,fieldset[disabled] .ivu-btn-warning:active>a:only-child,fieldset[disabled] .ivu-btn-warning:focus>a:only-child,fieldset[disabled] .ivu-btn-warning:hover>a:only-child,fieldset[disabled] .ivu-btn-warning>a:only-child{color:currentColor}.ivu-btn-warning.disabled.active>a:only-child:after,.ivu-btn-warning.disabled:active>a:only-child:after,.ivu-btn-warning.disabled:focus>a:only-child:after,.ivu-btn-warning.disabled:hover>a:only-child:after,.ivu-btn-warning.disabled>a:only-child:after,.ivu-btn-warning[disabled].active>a:only-child:after,.ivu-btn-warning[disabled]:active>a:only-child:after,.ivu-btn-warning[disabled]:focus>a:only-child:after,.ivu-btn-warning[disabled]:hover>a:only-child:after,.ivu-btn-warning[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-warning.active>a:only-child:after,fieldset[disabled] .ivu-btn-warning:active>a:only-child:after,fieldset[disabled] .ivu-btn-warning:focus>a:only-child:after,fieldset[disabled] .ivu-btn-warning:hover>a:only-child:after,fieldset[disabled] .ivu-btn-warning>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-warning.active,.ivu-btn-warning:active,.ivu-btn-warning:hover{color:#fff}.ivu-btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(255,153,0,.2);box-shadow:0 0 0 2px rgba(255,153,0,.2)}.ivu-btn-error{color:#fff;background-color:#ed4014;border-color:#ed4014}.ivu-btn-error>a:only-child{color:currentColor}.ivu-btn-error>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-error:hover{color:#fff;background-color:#f16643;border-color:#f16643}.ivu-btn-error:hover>a:only-child{color:currentColor}.ivu-btn-error:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-error.active,.ivu-btn-error:active{color:#f2f2f2;background-color:#e13d13;border-color:#e13d13}.ivu-btn-error.active>a:only-child,.ivu-btn-error:active>a:only-child{color:currentColor}.ivu-btn-error.active>a:only-child:after,.ivu-btn-error:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-error.disabled,.ivu-btn-error.disabled.active,.ivu-btn-error.disabled:active,.ivu-btn-error.disabled:focus,.ivu-btn-error.disabled:hover,.ivu-btn-error[disabled],.ivu-btn-error[disabled].active,.ivu-btn-error[disabled]:active,.ivu-btn-error[disabled]:focus,.ivu-btn-error[disabled]:hover,fieldset[disabled] .ivu-btn-error,fieldset[disabled] .ivu-btn-error.active,fieldset[disabled] .ivu-btn-error:active,fieldset[disabled] .ivu-btn-error:focus,fieldset[disabled] .ivu-btn-error:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-error.disabled.active>a:only-child,.ivu-btn-error.disabled:active>a:only-child,.ivu-btn-error.disabled:focus>a:only-child,.ivu-btn-error.disabled:hover>a:only-child,.ivu-btn-error.disabled>a:only-child,.ivu-btn-error[disabled].active>a:only-child,.ivu-btn-error[disabled]:active>a:only-child,.ivu-btn-error[disabled]:focus>a:only-child,.ivu-btn-error[disabled]:hover>a:only-child,.ivu-btn-error[disabled]>a:only-child,fieldset[disabled] .ivu-btn-error.active>a:only-child,fieldset[disabled] .ivu-btn-error:active>a:only-child,fieldset[disabled] .ivu-btn-error:focus>a:only-child,fieldset[disabled] .ivu-btn-error:hover>a:only-child,fieldset[disabled] .ivu-btn-error>a:only-child{color:currentColor}.ivu-btn-error.disabled.active>a:only-child:after,.ivu-btn-error.disabled:active>a:only-child:after,.ivu-btn-error.disabled:focus>a:only-child:after,.ivu-btn-error.disabled:hover>a:only-child:after,.ivu-btn-error.disabled>a:only-child:after,.ivu-btn-error[disabled].active>a:only-child:after,.ivu-btn-error[disabled]:active>a:only-child:after,.ivu-btn-error[disabled]:focus>a:only-child:after,.ivu-btn-error[disabled]:hover>a:only-child:after,.ivu-btn-error[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-error.active>a:only-child:after,fieldset[disabled] .ivu-btn-error:active>a:only-child:after,fieldset[disabled] .ivu-btn-error:focus>a:only-child:after,fieldset[disabled] .ivu-btn-error:hover>a:only-child:after,fieldset[disabled] .ivu-btn-error>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-error.active,.ivu-btn-error:active,.ivu-btn-error:hover{color:#fff}.ivu-btn-error:focus{-webkit-box-shadow:0 0 0 2px rgba(237,64,20,.2);box-shadow:0 0 0 2px rgba(237,64,20,.2)}.ivu-btn-info{color:#fff;background-color:#2db7f5;border-color:#2db7f5}.ivu-btn-info>a:only-child{color:currentColor}.ivu-btn-info>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-info:hover{color:#fff;background-color:#57c5f7;border-color:#57c5f7}.ivu-btn-info:hover>a:only-child{color:currentColor}.ivu-btn-info:hover>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-info.active,.ivu-btn-info:active{color:#f2f2f2;background-color:#2baee9;border-color:#2baee9}.ivu-btn-info.active>a:only-child,.ivu-btn-info:active>a:only-child{color:currentColor}.ivu-btn-info.active>a:only-child:after,.ivu-btn-info:active>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-info.disabled,.ivu-btn-info.disabled.active,.ivu-btn-info.disabled:active,.ivu-btn-info.disabled:focus,.ivu-btn-info.disabled:hover,.ivu-btn-info[disabled],.ivu-btn-info[disabled].active,.ivu-btn-info[disabled]:active,.ivu-btn-info[disabled]:focus,.ivu-btn-info[disabled]:hover,fieldset[disabled] .ivu-btn-info,fieldset[disabled] .ivu-btn-info.active,fieldset[disabled] .ivu-btn-info:active,fieldset[disabled] .ivu-btn-info:focus,fieldset[disabled] .ivu-btn-info:hover{color:#c5c8ce;background-color:#f7f7f7;border-color:#dcdee2}.ivu-btn-info.disabled.active>a:only-child,.ivu-btn-info.disabled:active>a:only-child,.ivu-btn-info.disabled:focus>a:only-child,.ivu-btn-info.disabled:hover>a:only-child,.ivu-btn-info.disabled>a:only-child,.ivu-btn-info[disabled].active>a:only-child,.ivu-btn-info[disabled]:active>a:only-child,.ivu-btn-info[disabled]:focus>a:only-child,.ivu-btn-info[disabled]:hover>a:only-child,.ivu-btn-info[disabled]>a:only-child,fieldset[disabled] .ivu-btn-info.active>a:only-child,fieldset[disabled] .ivu-btn-info:active>a:only-child,fieldset[disabled] .ivu-btn-info:focus>a:only-child,fieldset[disabled] .ivu-btn-info:hover>a:only-child,fieldset[disabled] .ivu-btn-info>a:only-child{color:currentColor}.ivu-btn-info.disabled.active>a:only-child:after,.ivu-btn-info.disabled:active>a:only-child:after,.ivu-btn-info.disabled:focus>a:only-child:after,.ivu-btn-info.disabled:hover>a:only-child:after,.ivu-btn-info.disabled>a:only-child:after,.ivu-btn-info[disabled].active>a:only-child:after,.ivu-btn-info[disabled]:active>a:only-child:after,.ivu-btn-info[disabled]:focus>a:only-child:after,.ivu-btn-info[disabled]:hover>a:only-child:after,.ivu-btn-info[disabled]>a:only-child:after,fieldset[disabled] .ivu-btn-info.active>a:only-child:after,fieldset[disabled] .ivu-btn-info:active>a:only-child:after,fieldset[disabled] .ivu-btn-info:focus>a:only-child:after,fieldset[disabled] .ivu-btn-info:hover>a:only-child:after,fieldset[disabled] .ivu-btn-info>a:only-child:after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.ivu-btn-info.active,.ivu-btn-info:active,.ivu-btn-info:hover{color:#fff}.ivu-btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(45,183,245,.2);box-shadow:0 0 0 2px rgba(45,183,245,.2)}.ivu-btn-circle,.ivu-btn-circle-outline{border-radius:32px}.ivu-btn-circle-outline.ivu-btn-large,.ivu-btn-circle.ivu-btn-large{border-radius:36px}.ivu-btn-circle-outline.ivu-btn-size,.ivu-btn-circle.ivu-btn-size{border-radius:24px}.ivu-btn-circle-outline.ivu-btn-icon-only,.ivu-btn-circle.ivu-btn-icon-only{width:32px;height:32px;padding:0;font-size:16px;border-radius:50%}.ivu-btn-circle-outline.ivu-btn-icon-only.ivu-btn-large,.ivu-btn-circle.ivu-btn-icon-only.ivu-btn-large{width:36px;height:36px;padding:0;font-size:16px;border-radius:50%}.ivu-btn-circle-outline.ivu-btn-icon-only.ivu-btn-small,.ivu-btn-circle.ivu-btn-icon-only.ivu-btn-small{width:24px;height:24px;padding:0;font-size:14px;border-radius:50%}.ivu-btn:before{position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;background:#fff;opacity:.35;content:'';border-radius:inherit;z-index:1;-webkit-transition:opacity .2s;transition:opacity .2s;pointer-events:none;display:none}.ivu-btn.ivu-btn-loading{pointer-events:none;position:relative}.ivu-btn.ivu-btn-loading:before{display:block}.ivu-btn-group{position:relative;display:inline-block;vertical-align:middle}.ivu-btn-group>.ivu-btn{position:relative;float:left}.ivu-btn-group>.ivu-btn.active,.ivu-btn-group>.ivu-btn:active,.ivu-btn-group>.ivu-btn:hover{z-index:2}.ivu-btn-group .ivu-btn-icon-only .ivu-icon{font-size:13px;position:relative}.ivu-btn-group-large .ivu-btn-icon-only .ivu-icon{font-size:15px}.ivu-btn-group-small .ivu-btn-icon-only .ivu-icon{font-size:12px}.ivu-btn-group-circle .ivu-btn{border-radius:32px}.ivu-btn-group-large.ivu-btn-group-circle .ivu-btn{border-radius:36px}.ivu-btn-group-large>.ivu-btn{padding:6px 15px 6px 15px;font-size:14px;border-radius:4px}.ivu-btn-group-small.ivu-btn-group-circle .ivu-btn{border-radius:24px}.ivu-btn-group-small>.ivu-btn{padding:1px 7px 2px;font-size:12px;border-radius:3px}.ivu-btn-group-small>.ivu-btn>.ivu-icon{font-size:12px}.ivu-btn+.ivu-btn-group,.ivu-btn-group .ivu-btn+.ivu-btn,.ivu-btn-group+.ivu-btn,.ivu-btn-group+.ivu-btn-group{margin-left:-1px}.ivu-btn-group .ivu-btn:not(:first-child):not(:last-child){border-radius:0}.ivu-btn-group:not(.ivu-btn-group-vertical)>.ivu-btn:first-child{margin-left:0}.ivu-btn-group:not(.ivu-btn-group-vertical)>.ivu-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ivu-btn-group:not(.ivu-btn-group-vertical)>.ivu-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.ivu-btn-group>.ivu-btn-group{float:left}.ivu-btn-group>.ivu-btn-group:not(:first-child):not(:last-child)>.ivu-btn{border-radius:0}.ivu-btn-group:not(.ivu-btn-group-vertical)>.ivu-btn-group:first-child:not(:last-child)>.ivu-btn:last-child{border-bottom-right-radius:0;border-top-right-radius:0;padding-right:8px}.ivu-btn-group:not(.ivu-btn-group-vertical)>.ivu-btn-group:last-child:not(:first-child)>.ivu-btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0;padding-left:8px}.ivu-btn-group-vertical{display:inline-block;vertical-align:middle}.ivu-btn-group-vertical>.ivu-btn{display:block;width:100%;max-width:100%;float:none}.ivu-btn+.ivu-btn-group-vertical,.ivu-btn-group-vertical .ivu-btn+.ivu-btn,.ivu-btn-group-vertical+.ivu-btn,.ivu-btn-group-vertical+.ivu-btn-group-vertical{margin-top:-1px;margin-left:0}.ivu-btn-group-vertical>.ivu-btn:first-child{margin-top:0}.ivu-btn-group-vertical>.ivu-btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.ivu-btn-group-vertical>.ivu-btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.ivu-btn-group-vertical>.ivu-btn-group-vertical:first-child:not(:last-child)>.ivu-btn:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0;padding-bottom:8px}.ivu-btn-group-vertical>.ivu-btn-group-vertical:last-child:not(:first-child)>.ivu-btn:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0;padding-top:8px}.ivu-btn-ghost{color:#fff;background:0 0}.ivu-btn-ghost:hover{background:0 0}.ivu-btn-ghost.ivu-btn-dashed,.ivu-btn-ghost.ivu-btn-default{color:#fff;border-color:#fff}.ivu-btn-ghost.ivu-btn-dashed:hover,.ivu-btn-ghost.ivu-btn-default:hover{color:#57a3f3;border-color:#57a3f3}.ivu-btn-ghost.ivu-btn-primary{color:#2d8cf0}.ivu-btn-ghost.ivu-btn-primary:hover{color:#57a3f3;background:rgba(245,249,254,.5)}.ivu-btn-ghost.ivu-btn-info{color:#2db7f5}.ivu-btn-ghost.ivu-btn-info:hover{color:#57c5f7;background:rgba(245,251,254,.5)}.ivu-btn-ghost.ivu-btn-success{color:#19be6b}.ivu-btn-ghost.ivu-btn-success:hover{color:#47cb89;background:rgba(244,252,248,.5)}.ivu-btn-ghost.ivu-btn-warning{color:#f90}.ivu-btn-ghost.ivu-btn-warning:hover{color:#ffad33;background:rgba(255,250,242,.5)}.ivu-btn-ghost.ivu-btn-error{color:#ed4014}.ivu-btn-ghost.ivu-btn-error:hover{color:#f16643;background:rgba(254,245,243,.5)}.ivu-btn-ghost.ivu-btn-dashed[disabled],.ivu-btn-ghost.ivu-btn-default[disabled],.ivu-btn-ghost.ivu-btn-error[disabled],.ivu-btn-ghost.ivu-btn-info[disabled],.ivu-btn-ghost.ivu-btn-primary[disabled],.ivu-btn-ghost.ivu-btn-success[disabled],.ivu-btn-ghost.ivu-btn-warning[disabled]{background:0 0;color:rgba(0,0,0,.25);border-color:#dcdee2}.ivu-btn-ghost.ivu-btn-text[disabled]{background:0 0;color:rgba(0,0,0,.25)}.ivu-affix{position:fixed;z-index:10}.ivu-back-top{z-index:10;position:fixed;cursor:pointer;display:none}.ivu-back-top.ivu-back-top-show{display:block}.ivu-back-top-inner{background-color:rgba(0,0,0,.6);border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-back-top-inner:hover{background-color:rgba(0,0,0,.7)}.ivu-back-top i{color:#fff;font-size:24px;padding:8px 12px}.ivu-badge{position:relative;display:inline-block}.ivu-badge-count{font-family:"Monospaced Number";line-height:1;vertical-align:middle;position:absolute;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);top:-10px;right:0;height:20px;border-radius:10px;min-width:20px;background:#ed4014;border:1px solid transparent;color:#fff;line-height:18px;text-align:center;padding:0 6px;font-size:12px;white-space:nowrap;-webkit-transform-origin:-10% center;-ms-transform-origin:-10% center;transform-origin:-10% center;z-index:10;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ivu-badge-count a,.ivu-badge-count a:hover{color:#fff}.ivu-badge-count-alone{top:auto;display:block;position:relative;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.ivu-badge-count-primary{background:#2d8cf0}.ivu-badge-count-success{background:#19be6b}.ivu-badge-count-error{background:#ed4014}.ivu-badge-count-warning{background:#f90}.ivu-badge-count-info{background:#2db7f5}.ivu-badge-count-normal{background:#e6ebf1;color:#808695}.ivu-badge-dot{position:absolute;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);-webkit-transform-origin:0 center;-ms-transform-origin:0 center;transform-origin:0 center;top:-4px;right:-8px;height:8px;width:8px;border-radius:100%;background:#ed4014;z-index:10;-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.ivu-badge-status{line-height:inherit;vertical-align:baseline}.ivu-badge-status-dot{width:6px;height:6px;display:inline-block;border-radius:50%;vertical-align:middle;position:relative;top:-1px}.ivu-badge-status-success{background-color:#19be6b}.ivu-badge-status-processing{background-color:#2d8cf0;position:relative}.ivu-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:50%;border:1px solid #2d8cf0;content:'';-webkit-animation:aniStatusProcessing 1.2s infinite ease-in-out;animation:aniStatusProcessing 1.2s infinite ease-in-out}.ivu-badge-status-default{background-color:#e6ebf1}.ivu-badge-status-error{background-color:#ed4014}.ivu-badge-status-warning{background-color:#f90}.ivu-badge-status-text{display:inline-block;color:#515a6e;font-size:12px;margin-left:6px}@-webkit-keyframes aniStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}100%{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@keyframes aniStatusProcessing{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:.5}100%{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}.ivu-chart-circle{display:inline-block;position:relative}.ivu-chart-circle-inner{width:100%;text-align:center;position:absolute;left:0;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);line-height:1}.ivu-spin{color:#2d8cf0;vertical-align:middle;text-align:center}.ivu-spin-dot{position:relative;display:block;border-radius:50%;background-color:#2d8cf0;width:20px;height:20px;-webkit-animation:ani-spin-bounce 1s 0s ease-in-out infinite;animation:ani-spin-bounce 1s 0s ease-in-out infinite}.ivu-spin-large .ivu-spin-dot{width:32px;height:32px}.ivu-spin-small .ivu-spin-dot{width:12px;height:12px}.ivu-spin-fix{position:absolute;top:0;left:0;z-index:8;width:100%;height:100%;background-color:rgba(255,255,255,.9)}.ivu-spin-fullscreen{z-index:2010}.ivu-spin-fullscreen-wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.ivu-spin-fix .ivu-spin-main{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ivu-spin-fix .ivu-spin-dot{display:inline-block}.ivu-spin-show-text .ivu-spin-dot,.ivu-spin-text{display:none}.ivu-spin-show-text .ivu-spin-text{display:block}.ivu-table-wrapper>.ivu-spin-fix{border:1px solid #dcdee2;border-top:0;border-left:0}@-webkit-keyframes ani-spin-bounce{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes ani-spin-bounce{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.ivu-alert{position:relative;padding:8px 48px 8px 16px;border-radius:4px;color:#515a6e;font-size:12px;line-height:16px;margin-bottom:10px}.ivu-alert.ivu-alert-with-icon{padding:8px 48px 8px 38px}.ivu-alert-icon{font-size:16px;top:6px;left:12px;position:absolute}.ivu-alert-desc{font-size:12px;color:#515a6e;line-height:21px;display:none;text-align:justify}.ivu-alert-success{border:1px solid #8ce6b0;background-color:#edfff3}.ivu-alert-success .ivu-alert-icon{color:#19be6b}.ivu-alert-info{border:1px solid #abdcff;background-color:#f0faff}.ivu-alert-info .ivu-alert-icon{color:#2d8cf0}.ivu-alert-warning{border:1px solid #ffd77a;background-color:#fff9e6}.ivu-alert-warning .ivu-alert-icon{color:#f90}.ivu-alert-error{border:1px solid #ffb08f;background-color:#ffefe6}.ivu-alert-error .ivu-alert-icon{color:#ed4014}.ivu-alert-close{font-size:12px;position:absolute;right:8px;top:8px;overflow:hidden;cursor:pointer}.ivu-alert-close .ivu-icon-ios-close{font-size:22px;color:#999;-webkit-transition:color .2s ease;transition:color .2s ease;position:relative;top:-3px}.ivu-alert-close .ivu-icon-ios-close:hover{color:#444}.ivu-alert-with-desc{padding:16px;position:relative;border-radius:4px;margin-bottom:10px;color:#515a6e;line-height:1.5}.ivu-alert-with-desc.ivu-alert-with-icon{padding:16px 16px 16px 69px}.ivu-alert-with-desc .ivu-alert-desc{display:block}.ivu-alert-with-desc .ivu-alert-message{font-size:14px;color:#17233d;display:block}.ivu-alert-with-desc .ivu-alert-icon{top:50%;left:24px;margin-top:-24px;font-size:28px}.ivu-alert-with-banner{border-radius:0}.ivu-collapse{background-color:#f7f7f7;border-radius:3px;border:1px solid #dcdee2}.ivu-collapse-simple{border-left:none;border-right:none;background-color:#fff;border-radius:0}.ivu-collapse>.ivu-collapse-item{border-top:1px solid #dcdee2}.ivu-collapse>.ivu-collapse-item:first-child{border-top:0}.ivu-collapse>.ivu-collapse-item>.ivu-collapse-header{height:38px;line-height:38px;padding-left:16px;color:#666;cursor:pointer;position:relative;border-bottom:1px solid transparent;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-collapse>.ivu-collapse-item>.ivu-collapse-header>i{-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;margin-right:14px}.ivu-collapse>.ivu-collapse-item.ivu-collapse-item-active>.ivu-collapse-header{border-bottom:1px solid #dcdee2}.ivu-collapse-simple>.ivu-collapse-item.ivu-collapse-item-active>.ivu-collapse-header{border-bottom:1px solid transparent}.ivu-collapse>.ivu-collapse-item.ivu-collapse-item-active>.ivu-collapse-header>i{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ivu-collapse-content{color:#515a6e;padding:0 16px;background-color:#fff}.ivu-collapse-content>.ivu-collapse-content-box{padding-top:16px;padding-bottom:16px}.ivu-collapse-simple>.ivu-collapse-item>.ivu-collapse-content>.ivu-collapse-content-box{padding-top:0}.ivu-collapse-item:last-child>.ivu-collapse-content{border-radius:0 0 3px 3px}.ivu-card{background:#fff;border-radius:4px;font-size:14px;position:relative;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-card-bordered{border:1px solid #dcdee2;border-color:#e8eaec}.ivu-card-shadow{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.ivu-card:hover{-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);border-color:#eee}.ivu-card.ivu-card-dis-hover:hover{-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.ivu-card.ivu-card-dis-hover.ivu-card-bordered:hover{border-color:#e8eaec}.ivu-card.ivu-card-shadow:hover{-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.ivu-card-head{border-bottom:1px solid #e8eaec;padding:14px 16px;line-height:1}.ivu-card-head p,.ivu-card-head-inner{display:inline-block;width:100%;height:20px;line-height:20px;font-size:14px;color:#17233d;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-card-head p i,.ivu-card-head p span{vertical-align:middle}.ivu-card-extra{position:absolute;right:16px;top:14px}.ivu-card-body{padding:16px}.ivu-message{font-size:14px;position:fixed;z-index:1010;width:100%;top:16px;left:0;pointer-events:none}.ivu-message-notice{padding:8px;text-align:center;-webkit-transition:height .3s ease-in-out,padding .3s ease-in-out;transition:height .3s ease-in-out,padding .3s ease-in-out}.ivu-message-notice:first-child{margin-top:-8px}.ivu-message-notice-close{position:absolute;right:4px;top:10px;color:#999;outline:0}.ivu-message-notice-close i.ivu-icon{font-size:22px;color:#999;-webkit-transition:color .2s ease;transition:color .2s ease;position:relative;top:-3px}.ivu-message-notice-close i.ivu-icon:hover{color:#444}.ivu-message-notice-content{display:inline-block;pointer-events:all;padding:8px 16px;border-radius:4px;-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);background:#fff;position:relative}.ivu-message-notice-content-text{display:inline-block}.ivu-message-notice-closable .ivu-message-notice-content-text{padding-right:32px}.ivu-message-success .ivu-icon{color:#19be6b}.ivu-message-error .ivu-icon{color:#ed4014}.ivu-message-warning .ivu-icon{color:#f90}.ivu-message-info .ivu-icon,.ivu-message-loading .ivu-icon{color:#2d8cf0}.ivu-message .ivu-icon{margin-right:4px;font-size:16px;vertical-align:middle}.ivu-message-custom-content span{vertical-align:middle}.ivu-notice{width:335px;margin-right:24px;position:fixed;z-index:1010}.ivu-notice-content-with-icon{margin-left:51px}.ivu-notice-with-desc.ivu-notice-with-icon .ivu-notice-title{margin-left:51px}.ivu-notice-notice{margin-bottom:10px;padding:16px;border-radius:4px;-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);background:#fff;line-height:1;position:relative;overflow:hidden}.ivu-notice-notice-close{position:absolute;right:8px;top:15px;color:#999;outline:0}.ivu-notice-notice-close i{font-size:22px;color:#999;-webkit-transition:color .2s ease;transition:color .2s ease;position:relative;top:-3px}.ivu-notice-notice-close i:hover{color:#444}.ivu-notice-notice-content-with-render .ivu-notice-desc{display:none}.ivu-notice-notice-with-desc .ivu-notice-notice-close{top:11px}.ivu-notice-content-with-render-notitle{margin-left:26px}.ivu-notice-title{font-size:14px;line-height:17px;color:#17233d;padding-right:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-notice-with-desc .ivu-notice-title{font-weight:700;margin-bottom:8px}.ivu-notice-desc{font-size:12px;color:#515a6e;text-align:justify;line-height:1.5}.ivu-notice-with-desc.ivu-notice-with-icon .ivu-notice-desc{margin-left:51px}.ivu-notice-with-icon .ivu-notice-title{margin-left:26px}.ivu-notice-icon{position:absolute;top:-2px;font-size:16px}.ivu-notice-icon-success{color:#19be6b}.ivu-notice-icon-info{color:#2d8cf0}.ivu-notice-icon-warning{color:#f90}.ivu-notice-icon-error{color:#ed4014}.ivu-notice-with-desc .ivu-notice-icon{font-size:36px;top:-6px}.ivu-notice-custom-content{position:relative}.ivu-radio-focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2);z-index:1}.ivu-radio-group{display:inline-block;font-size:12px;vertical-align:middle}.ivu-radio-group-vertical .ivu-radio-wrapper{display:block;height:30px;line-height:30px}.ivu-radio-wrapper{font-size:12px;vertical-align:middle;display:inline-block;position:relative;white-space:nowrap;margin-right:8px;cursor:pointer}.ivu-radio-wrapper-disabled{cursor:not-allowed}.ivu-radio{display:inline-block;margin-right:4px;white-space:nowrap;position:relative;line-height:1;vertical-align:middle;cursor:pointer}.ivu-radio:hover .ivu-radio-inner{border-color:#bcbcbc}.ivu-radio-inner{display:inline-block;width:14px;height:14px;position:relative;top:0;left:0;background-color:#fff;border:1px solid #dcdee2;border-radius:50%;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-radio-inner:after{position:absolute;width:8px;height:8px;left:2px;top:2px;border-radius:6px;display:table;border-top:0;border-left:0;content:' ';background-color:#2d8cf0;opacity:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.ivu-radio-large{font-size:14px}.ivu-radio-large .ivu-radio-inner{width:16px;height:16px}.ivu-radio-large .ivu-radio-inner:after{width:10px;height:10px}.ivu-radio-large .ivu-radio-wrapper,.ivu-radio-large.ivu-radio-wrapper{font-size:14px}.ivu-radio-small .ivu-radio-inner{width:12px;height:12px}.ivu-radio-small .ivu-radio-inner:after{width:6px;height:6px}.ivu-radio-input{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;opacity:0;cursor:pointer}.ivu-radio-checked .ivu-radio-inner{border-color:#2d8cf0}.ivu-radio-checked .ivu-radio-inner:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-radio-checked:hover .ivu-radio-inner{border-color:#2d8cf0}.ivu-radio-disabled{cursor:not-allowed}.ivu-radio-disabled .ivu-radio-input{cursor:not-allowed}.ivu-radio-disabled:hover .ivu-radio-inner{border-color:#dcdee2}.ivu-radio-disabled .ivu-radio-inner{border-color:#dcdee2;background-color:#f3f3f3}.ivu-radio-disabled .ivu-radio-inner:after{background-color:#ccc}.ivu-radio-disabled .ivu-radio-disabled+span{color:#ccc}span.ivu-radio+*{margin-left:2px;margin-right:2px}.ivu-radio-group-button{font-size:0;-webkit-text-size-adjust:none}.ivu-radio-group-button .ivu-radio{width:0;margin-right:0}.ivu-radio-group-button .ivu-radio-wrapper{display:inline-block;height:32px;line-height:30px;margin:0;padding:0 15px;font-size:12px;color:#515a6e;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;cursor:pointer;border:1px solid #dcdee2;border-left:0;background:#fff;position:relative}.ivu-radio-group-button .ivu-radio-wrapper>span{margin-left:0}.ivu-radio-group-button .ivu-radio-wrapper:after,.ivu-radio-group-button .ivu-radio-wrapper:before{content:'';display:block;position:absolute;width:1px;height:100%;left:-1px;top:0;background:#dcdee2;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-radio-group-button .ivu-radio-wrapper:after{height:36px;left:-1px;top:-3px;background:rgba(45,140,240,.2);opacity:0}.ivu-radio-group-button .ivu-radio-wrapper:first-child{border-radius:4px 0 0 4px;border-left:1px solid #dcdee2}.ivu-radio-group-button .ivu-radio-wrapper:first-child:after,.ivu-radio-group-button .ivu-radio-wrapper:first-child:before{display:none}.ivu-radio-group-button .ivu-radio-wrapper:last-child{border-radius:0 4px 4px 0}.ivu-radio-group-button .ivu-radio-wrapper:first-child:last-child{border-radius:4px}.ivu-radio-group-button .ivu-radio-wrapper:hover{position:relative;color:#2d8cf0}.ivu-radio-group-button .ivu-radio-wrapper:hover .ivu-radio{background-color:#000}.ivu-radio-group-button .ivu-radio-wrapper .ivu-radio-inner,.ivu-radio-group-button .ivu-radio-wrapper input{opacity:0;width:0;height:0}.ivu-radio-group-button .ivu-radio-wrapper-checked{background:#fff;border-color:#2d8cf0;color:#2d8cf0;-webkit-box-shadow:-1px 0 0 0 #2d8cf0;box-shadow:-1px 0 0 0 #2d8cf0;z-index:1}.ivu-radio-group-button .ivu-radio-wrapper-checked:before{background:#2d8cf0;opacity:.1}.ivu-radio-group-button .ivu-radio-wrapper-checked.ivu-radio-focus{-webkit-box-shadow:-1px 0 0 0 #2d8cf0,0 0 0 2px rgba(45,140,240,.2);box-shadow:-1px 0 0 0 #2d8cf0,0 0 0 2px rgba(45,140,240,.2);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-radio-group-button .ivu-radio-wrapper-checked.ivu-radio-focus:after{left:-3px;top:-3px;opacity:1;background:rgba(45,140,240,.2)}.ivu-radio-group-button .ivu-radio-wrapper-checked.ivu-radio-focus:first-child{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-radio-group-button .ivu-radio-wrapper-checked:first-child{border-color:#2d8cf0;-webkit-box-shadow:none;box-shadow:none}.ivu-radio-group-button .ivu-radio-wrapper-checked:hover{border-color:#57a3f3;color:#57a3f3}.ivu-radio-group-button .ivu-radio-wrapper-checked:active{border-color:#2b85e4;color:#2b85e4}.ivu-radio-group-button .ivu-radio-wrapper-disabled{border-color:#dcdee2;background-color:#f7f7f7;cursor:not-allowed;color:#ccc}.ivu-radio-group-button .ivu-radio-wrapper-disabled:first-child,.ivu-radio-group-button .ivu-radio-wrapper-disabled:hover{border-color:#dcdee2;background-color:#f7f7f7;color:#ccc}.ivu-radio-group-button .ivu-radio-wrapper-disabled:first-child{border-left-color:#dcdee2}.ivu-radio-group-button .ivu-radio-wrapper-disabled.ivu-radio-wrapper-checked{color:#fff;background-color:#e6e6e6;border-color:#dcdee2;-webkit-box-shadow:none!important;box-shadow:none!important}.ivu-radio-group-button.ivu-radio-group-large .ivu-radio-wrapper{height:36px;line-height:34px;font-size:14px}.ivu-radio-group-button.ivu-radio-group-large .ivu-radio-wrapper:after{height:40px}.ivu-radio-group-button.ivu-radio-group-small .ivu-radio-wrapper{height:24px;line-height:22px;padding:0 12px;font-size:12px}.ivu-radio-group-button.ivu-radio-group-small .ivu-radio-wrapper:after{height:28px}.ivu-radio-group-button.ivu-radio-group-small .ivu-radio-wrapper:first-child{border-radius:3px 0 0 3px}.ivu-radio-group-button.ivu-radio-group-small .ivu-radio-wrapper:last-child{border-radius:0 3px 3px 0}.ivu-checkbox-focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2);z-index:1}.ivu-checkbox{display:inline-block;vertical-align:middle;white-space:nowrap;cursor:pointer;line-height:1;position:relative}.ivu-checkbox-disabled{cursor:not-allowed}.ivu-checkbox:hover .ivu-checkbox-inner{border-color:#bcbcbc}.ivu-checkbox-inner{display:inline-block;width:14px;height:14px;position:relative;top:0;left:0;border:1px solid #dcdee2;border-radius:2px;background-color:#fff;-webkit-transition:border-color .2s ease-in-out,background-color .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border-color .2s ease-in-out,background-color .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border-color .2s ease-in-out,background-color .2s ease-in-out,box-shadow .2s ease-in-out;transition:border-color .2s ease-in-out,background-color .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-checkbox-inner:after{content:'';display:table;width:4px;height:8px;position:absolute;top:1px;left:4px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(0);-ms-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-checkbox-large .ivu-checkbox-inner{width:16px;height:16px}.ivu-checkbox-large .ivu-checkbox-inner:after{width:5px;height:9px}.ivu-checkbox-small{font-size:12px}.ivu-checkbox-small .ivu-checkbox-inner{width:12px;height:12px}.ivu-checkbox-small .ivu-checkbox-inner:after{top:0;left:3px}.ivu-checkbox-input{width:100%;height:100%;position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;cursor:pointer;opacity:0}.ivu-checkbox-input[disabled]{cursor:not-allowed}.ivu-checkbox-checked:hover .ivu-checkbox-inner{border-color:#2d8cf0}.ivu-checkbox-checked .ivu-checkbox-inner{border-color:#2d8cf0;background-color:#2d8cf0}.ivu-checkbox-checked .ivu-checkbox-inner:after{content:'';display:table;width:4px;height:8px;position:absolute;top:1px;left:4px;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1);-ms-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-checkbox-large .ivu-checkbox-checked .ivu-checkbox-inner:after{width:5px;height:9px}.ivu-checkbox-small .ivu-checkbox-checked .ivu-checkbox-inner:after{top:0;left:3px}.ivu-checkbox-disabled.ivu-checkbox-checked:hover .ivu-checkbox-inner{border-color:#dcdee2}.ivu-checkbox-disabled.ivu-checkbox-checked .ivu-checkbox-inner{background-color:#f3f3f3;border-color:#dcdee2}.ivu-checkbox-disabled.ivu-checkbox-checked .ivu-checkbox-inner:after{-webkit-animation-name:none;animation-name:none;border-color:#ccc}.ivu-checkbox-disabled:hover .ivu-checkbox-inner{border-color:#dcdee2}.ivu-checkbox-disabled .ivu-checkbox-inner{border-color:#dcdee2;background-color:#f3f3f3}.ivu-checkbox-disabled .ivu-checkbox-inner:after{-webkit-animation-name:none;animation-name:none;border-color:#f3f3f3}.ivu-checkbox-disabled .ivu-checkbox-inner-input{cursor:default}.ivu-checkbox-disabled+span{color:#ccc;cursor:not-allowed}.ivu-checkbox-indeterminate .ivu-checkbox-inner:after{content:'';width:8px;height:1px;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);position:absolute;left:2px;top:5px}.ivu-checkbox-indeterminate:hover .ivu-checkbox-inner{border-color:#2d8cf0}.ivu-checkbox-indeterminate .ivu-checkbox-inner{background-color:#2d8cf0;border-color:#2d8cf0}.ivu-checkbox-indeterminate.ivu-checkbox-disabled .ivu-checkbox-inner{background-color:#f3f3f3;border-color:#dcdee2}.ivu-checkbox-indeterminate.ivu-checkbox-disabled .ivu-checkbox-inner:after{border-color:#c5c8ce}.ivu-checkbox-large .ivu-checkbox-indeterminate .ivu-checkbox-inner:after{width:10px;top:6px}.ivu-checkbox-small .ivu-checkbox-indeterminate .ivu-checkbox-inner:after{width:6px;top:4px}.ivu-checkbox-wrapper{cursor:pointer;font-size:12px;display:inline-block;margin-right:8px}.ivu-checkbox-wrapper-disabled{cursor:not-allowed}.ivu-checkbox-wrapper.ivu-checkbox-large{font-size:14px}.ivu-checkbox+span,.ivu-checkbox-wrapper+span{margin-right:4px}.ivu-checkbox-group{font-size:14px}.ivu-checkbox-group-item{display:inline-block}.ivu-switch{display:inline-block;width:44px;height:22px;line-height:20px;border-radius:22px;vertical-align:middle;border:1px solid #ccc;background-color:#ccc;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-switch-loading{opacity:.4}.ivu-switch-inner{color:#fff;font-size:12px;position:absolute;left:23px}.ivu-switch-inner i{width:12px;height:12px;text-align:center;position:relative;top:-1px}.ivu-switch:after{content:'';width:18px;height:18px;border-radius:18px;background-color:#fff;position:absolute;left:1px;top:1px;cursor:pointer;-webkit-transition:left .2s ease-in-out,width .2s ease-in-out;transition:left .2s ease-in-out,width .2s ease-in-out}.ivu-switch:active:after{width:26px}.ivu-switch:before{content:'';display:none;width:14px;height:14px;border-radius:50%;background-color:transparent;position:absolute;left:3px;top:3px;z-index:1;border:1px solid #2d8cf0;border-color:transparent transparent transparent #2d8cf0;-webkit-animation:switch-loading 1s linear;animation:switch-loading 1s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.ivu-switch-loading:before{display:block}.ivu-switch:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2);outline:0}.ivu-switch:focus:hover{-webkit-box-shadow:none;box-shadow:none}.ivu-switch-small{width:28px;height:16px;line-height:14px}.ivu-switch-small:after{width:12px;height:12px}.ivu-switch-small:active:after{width:14px}.ivu-switch-small:before{width:10px;height:10px;left:2px;top:2px}.ivu-switch-small.ivu-switch-checked:after{left:13px}.ivu-switch-small.ivu-switch-checked:before{left:14px}.ivu-switch-small:active.ivu-switch-checked:after{left:11px}.ivu-switch-large{width:56px}.ivu-switch-large:active:after{width:26px}.ivu-switch-large:active:after{width:30px}.ivu-switch-large.ivu-switch-checked:after{left:35px}.ivu-switch-large.ivu-switch-checked:before{left:37px}.ivu-switch-large:active.ivu-switch-checked:after{left:23px}.ivu-switch-checked{border-color:#2d8cf0;background-color:#2d8cf0}.ivu-switch-checked .ivu-switch-inner{left:7px}.ivu-switch-checked:after{left:23px}.ivu-switch-checked:before{left:25px}.ivu-switch-checked:active:after{left:15px}.ivu-switch-disabled{cursor:not-allowed;opacity:.4}.ivu-switch-disabled:after{background:#fff;cursor:not-allowed}.ivu-switch-disabled .ivu-switch-inner{color:#fff}.ivu-switch-disabled.ivu-switch-checked{border-color:#2d8cf0;background-color:#2d8cf0;opacity:.4}.ivu-switch-disabled.ivu-switch-checked:after{background:#fff}.ivu-switch-disabled.ivu-switch-checked .ivu-switch-inner{color:#fff}@-webkit-keyframes switch-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes switch-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ivu-input-number{display:inline-block;width:100%;line-height:1.5;padding:4px 7px;font-size:12px;color:#515a6e;background-color:#fff;background-image:none;position:relative;cursor:text;-webkit-transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;margin:0;padding:0;width:80px;height:32px;line-height:32px;vertical-align:middle;border:1px solid #dcdee2;border-radius:4px;overflow:hidden;cursor:default}.ivu-input-number::-moz-placeholder{color:#c5c8ce;opacity:1}.ivu-input-number:-ms-input-placeholder{color:#c5c8ce}.ivu-input-number::-webkit-input-placeholder{color:#c5c8ce}.ivu-input-number:hover{border-color:#57a3f3}.ivu-input-number:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-input-number[disabled],fieldset[disabled] .ivu-input-number{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-input-number[disabled]:hover,fieldset[disabled] .ivu-input-number:hover{border-color:#e3e5e8}textarea.ivu-input-number{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;font-size:14px}.ivu-input-number-large{font-size:14px;padding:6px 7px;height:36px}.ivu-input-number-small{padding:1px 7px;height:24px;border-radius:3px}.ivu-input-number-handler-wrap{width:22px;height:100%;border-left:1px solid #dcdee2;border-radius:0 4px 4px 0;background:#fff;position:absolute;top:0;right:0;opacity:0;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.ivu-input-number:hover .ivu-input-number-handler-wrap{opacity:1}.ivu-input-number-handler-up{cursor:pointer}.ivu-input-number-handler-up-inner{top:1px}.ivu-input-number-handler-down{border-top:1px solid #dcdee2;top:-1px;cursor:pointer}.ivu-input-number-handler{display:block;width:100%;height:16px;line-height:0;text-align:center;overflow:hidden;color:#999;position:relative}.ivu-input-number-handler:hover .ivu-input-number-handler-down-inner,.ivu-input-number-handler:hover .ivu-input-number-handler-up-inner{color:#57a3f3}.ivu-input-number-handler-down-inner,.ivu-input-number-handler-up-inner{width:12px;height:12px;line-height:12px;font-size:14px;color:#999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;right:5px;-webkit-transition:all .2s linear;transition:all .2s linear}.ivu-input-number:hover{border-color:#57a3f3}.ivu-input-number-focused{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-input-number-disabled{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-input-number-disabled:hover{border-color:#e3e5e8}.ivu-input-number-input-wrap{overflow:hidden;height:32px}.ivu-input-number-input{width:100%;height:32px;line-height:32px;padding:0 7px;text-align:left;outline:0;-moz-appearance:textfield;color:#666;border:0;border-radius:4px;-webkit-transition:all .2s linear;transition:all .2s linear}.ivu-input-number-input[disabled]{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-input-number-input[disabled]:hover{border-color:#e3e5e8}.ivu-input-number-input::-webkit-input-placeholder{color:#c5c8ce}.ivu-input-number-input:-ms-input-placeholder{color:#c5c8ce}.ivu-input-number-input::-ms-input-placeholder{color:#c5c8ce}.ivu-input-number-input::placeholder{color:#c5c8ce}.ivu-input-number-large{padding:0}.ivu-input-number-large .ivu-input-number-input-wrap{height:36px}.ivu-input-number-large .ivu-input-number-handler{height:18px}.ivu-input-number-large input{height:36px;line-height:36px}.ivu-input-number-large .ivu-input-number-handler-up-inner{top:2px}.ivu-input-number-large .ivu-input-number-handler-down-inner{bottom:2px}.ivu-input-number-small{padding:0}.ivu-input-number-small .ivu-input-number-input-wrap{height:24px}.ivu-input-number-small .ivu-input-number-handler{height:12px}.ivu-input-number-small input{height:24px;line-height:24px;margin-top:-1px;vertical-align:top}.ivu-input-number-small .ivu-input-number-handler-up-inner{top:-1px}.ivu-input-number-small .ivu-input-number-handler-down-inner{bottom:-1px}.ivu-input-number-disabled .ivu-input-number-handler-down-inner,.ivu-input-number-disabled .ivu-input-number-handler-up-inner,.ivu-input-number-handler-down-disabled .ivu-input-number-handler-down-inner,.ivu-input-number-handler-down-disabled .ivu-input-number-handler-up-inner,.ivu-input-number-handler-up-disabled .ivu-input-number-handler-down-inner,.ivu-input-number-handler-up-disabled .ivu-input-number-handler-up-inner{opacity:.72;color:#ccc!important;cursor:not-allowed}.ivu-input-number-disabled .ivu-input-number-input{opacity:.72;cursor:not-allowed;background-color:#f3f3f3}.ivu-input-number-disabled .ivu-input-number-handler-wrap{display:none}.ivu-input-number-disabled .ivu-input-number-handler{opacity:.72;color:#ccc!important;cursor:not-allowed}.ivu-form-item-error .ivu-input-number{border:1px solid #ed4014}.ivu-form-item-error .ivu-input-number:hover{border-color:#ed4014}.ivu-form-item-error .ivu-input-number:focus{border-color:#ed4014;outline:0;-webkit-box-shadow:0 0 0 2px rgba(237,64,20,.2);box-shadow:0 0 0 2px rgba(237,64,20,.2)}.ivu-form-item-error .ivu-input-number-focused{border-color:#ed4014;outline:0;-webkit-box-shadow:0 0 0 2px rgba(237,64,20,.2);box-shadow:0 0 0 2px rgba(237,64,20,.2)}.ivu-scroll-wrapper{width:auto;margin:0 auto;position:relative;outline:0}.ivu-scroll-container{overflow-y:scroll}.ivu-scroll-content{opacity:1;-webkit-transition:opacity .5s;transition:opacity .5s}.ivu-scroll-content-loading{opacity:.5}.ivu-scroll-loader{text-align:center;padding:0;-webkit-transition:padding .5s;transition:padding .5s}.ivu-scroll-loader-wrapper{padding:5px 0;height:0;background-color:inherit;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:opacity .3s,height .5s,-webkit-transform .5s;transition:opacity .3s,height .5s,-webkit-transform .5s;transition:opacity .3s,transform .5s,height .5s;transition:opacity .3s,transform .5s,height .5s,-webkit-transform .5s}.ivu-scroll-loader-wrapper-active{height:40px;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}@-webkit-keyframes ani-demo-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ani-demo-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ivu-scroll-loader-wrapper .ivu-scroll-spinner{position:relative}.ivu-scroll-loader-wrapper .ivu-scroll-spinner-icon{-webkit-animation:ani-demo-spin 1s linear infinite;animation:ani-demo-spin 1s linear infinite}.ivu-tag{display:inline-block;height:22px;line-height:22px;margin:2px 4px 2px 0;padding:0 8px;border:1px solid #e8eaec;border-radius:3px;background:#f7f7f7;font-size:12px;vertical-align:middle;opacity:1;overflow:hidden;cursor:pointer}.ivu-tag:not(.ivu-tag-border):not(.ivu-tag-dot):not(.ivu-tag-checked){background:0 0;border:0;color:#515a6e}.ivu-tag:not(.ivu-tag-border):not(.ivu-tag-dot):not(.ivu-tag-checked) .ivu-icon-ios-close{color:#515a6e!important}.ivu-tag-color-error{color:#ed4014!important;border-color:#ed4014}.ivu-tag-color-success{color:#19be6b!important;border-color:#19be6b}.ivu-tag-color-primary{color:#2d8cf0!important;border-color:#2d8cf0}.ivu-tag-color-warning{color:#f90!important;border-color:#f90}.ivu-tag-color-white{color:#fff!important}.ivu-tag-dot{height:32px;line-height:32px;border:1px solid #e8eaec!important;color:#515a6e!important;background:#fff!important;padding:0 12px}.ivu-tag-dot-inner{display:inline-block;width:12px;height:12px;margin-right:8px;border-radius:50%;background:#e8eaec;position:relative;top:1px}.ivu-tag-dot .ivu-icon-ios-close{color:#666!important;margin-left:12px!important}.ivu-tag-border{height:24px;line-height:24px;border:1px solid #e8eaec;color:#e8eaec;background:#fff!important;position:relative}.ivu-tag-border .ivu-icon-ios-close{color:#666;margin-left:12px!important}.ivu-tag-border:after{content:"";display:none;width:1px;background:currentColor;position:absolute;top:0;bottom:0;right:22px}.ivu-tag-border.ivu-tag-closable:after{display:block}.ivu-tag-border.ivu-tag-closable .ivu-icon-ios-close{margin-left:18px!important;left:4px;top:-1px}.ivu-tag-border.ivu-tag-primary{color:#2d8cf0!important;border:1px solid #2d8cf0!important}.ivu-tag-border.ivu-tag-primary:after{background:#2d8cf0}.ivu-tag-border.ivu-tag-primary .ivu-icon-ios-close{color:#2d8cf0!important}.ivu-tag-border.ivu-tag-success{color:#19be6b!important;border:1px solid #19be6b!important}.ivu-tag-border.ivu-tag-success:after{background:#19be6b}.ivu-tag-border.ivu-tag-success .ivu-icon-ios-close{color:#19be6b!important}.ivu-tag-border.ivu-tag-warning{color:#f90!important;border:1px solid #f90!important}.ivu-tag-border.ivu-tag-warning:after{background:#f90}.ivu-tag-border.ivu-tag-warning .ivu-icon-ios-close{color:#f90!important}.ivu-tag-border.ivu-tag-error{color:#ed4014!important;border:1px solid #ed4014!important}.ivu-tag-border.ivu-tag-error:after{background:#ed4014}.ivu-tag-border.ivu-tag-error .ivu-icon-ios-close{color:#ed4014!important}.ivu-tag:hover{opacity:.85}.ivu-tag-text{color:#515a6e}.ivu-tag-text a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ivu-tag .ivu-icon-ios-close{display:inline-block;font-size:14px;-webkit-transform:scale(1.42857143) rotate(0);-ms-transform:scale(1.42857143) rotate(0);transform:scale(1.42857143) rotate(0);cursor:pointer;margin-left:2px;color:#666;opacity:.66;position:relative;top:-1px}:root .ivu-tag .ivu-icon-ios-close{font-size:14px}.ivu-tag .ivu-icon-ios-close:hover{opacity:1}.ivu-tag-error,.ivu-tag-primary,.ivu-tag-success,.ivu-tag-warning{border:0}.ivu-tag-error,.ivu-tag-error .ivu-icon-ios-close,.ivu-tag-error .ivu-icon-ios-close:hover,.ivu-tag-error a,.ivu-tag-error a:hover,.ivu-tag-primary,.ivu-tag-primary .ivu-icon-ios-close,.ivu-tag-primary .ivu-icon-ios-close:hover,.ivu-tag-primary a,.ivu-tag-primary a:hover,.ivu-tag-success,.ivu-tag-success .ivu-icon-ios-close,.ivu-tag-success .ivu-icon-ios-close:hover,.ivu-tag-success a,.ivu-tag-success a:hover,.ivu-tag-warning,.ivu-tag-warning .ivu-icon-ios-close,.ivu-tag-warning .ivu-icon-ios-close:hover,.ivu-tag-warning a,.ivu-tag-warning a:hover{color:#fff}.ivu-tag-primary,.ivu-tag-primary.ivu-tag-dot .ivu-tag-dot-inner{background:#2d8cf0}.ivu-tag-success,.ivu-tag-success.ivu-tag-dot .ivu-tag-dot-inner{background:#19be6b}.ivu-tag-warning,.ivu-tag-warning.ivu-tag-dot .ivu-tag-dot-inner{background:#f90}.ivu-tag-error,.ivu-tag-error.ivu-tag-dot .ivu-tag-dot-inner{background:#ed4014}.ivu-tag-pink{line-height:20px;background:#fff0f6;border-color:#ffadd2}.ivu-tag-pink .ivu-tag-text{color:#eb2f96!important}.ivu-tag-pink.ivu-tag-dot{line-height:32px}.ivu-tag-magenta{line-height:20px;background:#fff0f6;border-color:#ffadd2}.ivu-tag-magenta .ivu-tag-text{color:#eb2f96!important}.ivu-tag-magenta.ivu-tag-dot{line-height:32px}.ivu-tag-red{line-height:20px;background:#fff1f0;border-color:#ffa39e}.ivu-tag-red .ivu-tag-text{color:#f5222d!important}.ivu-tag-red.ivu-tag-dot{line-height:32px}.ivu-tag-volcano{line-height:20px;background:#fff2e8;border-color:#ffbb96}.ivu-tag-volcano .ivu-tag-text{color:#fa541c!important}.ivu-tag-volcano.ivu-tag-dot{line-height:32px}.ivu-tag-orange{line-height:20px;background:#fff7e6;border-color:#ffd591}.ivu-tag-orange .ivu-tag-text{color:#fa8c16!important}.ivu-tag-orange.ivu-tag-dot{line-height:32px}.ivu-tag-yellow{line-height:20px;background:#feffe6;border-color:#fffb8f}.ivu-tag-yellow .ivu-tag-text{color:#fadb14!important}.ivu-tag-yellow.ivu-tag-dot{line-height:32px}.ivu-tag-gold{line-height:20px;background:#fffbe6;border-color:#ffe58f}.ivu-tag-gold .ivu-tag-text{color:#faad14!important}.ivu-tag-gold.ivu-tag-dot{line-height:32px}.ivu-tag-cyan{line-height:20px;background:#e6fffb;border-color:#87e8de}.ivu-tag-cyan .ivu-tag-text{color:#13c2c2!important}.ivu-tag-cyan.ivu-tag-dot{line-height:32px}.ivu-tag-lime{line-height:20px;background:#fcffe6;border-color:#eaff8f}.ivu-tag-lime .ivu-tag-text{color:#a0d911!important}.ivu-tag-lime.ivu-tag-dot{line-height:32px}.ivu-tag-green{line-height:20px;background:#f6ffed;border-color:#b7eb8f}.ivu-tag-green .ivu-tag-text{color:#52c41a!important}.ivu-tag-green.ivu-tag-dot{line-height:32px}.ivu-tag-blue{line-height:20px;background:#e6f7ff;border-color:#91d5ff}.ivu-tag-blue .ivu-tag-text{color:#1890ff!important}.ivu-tag-blue.ivu-tag-dot{line-height:32px}.ivu-tag-geekblue{line-height:20px;background:#f0f5ff;border-color:#adc6ff}.ivu-tag-geekblue .ivu-tag-text{color:#2f54eb!important}.ivu-tag-geekblue.ivu-tag-dot{line-height:32px}.ivu-tag-purple{line-height:20px;background:#f9f0ff;border-color:#d3adf7}.ivu-tag-purple .ivu-tag-text{color:#722ed1!important}.ivu-tag-purple.ivu-tag-dot{line-height:32px}.ivu-layout{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:auto;flex:auto;background:#f5f7f9}.ivu-layout.ivu-layout-has-sider{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.ivu-layout.ivu-layout-has-sider>.ivu-layout,.ivu-layout.ivu-layout-has-sider>.ivu-layout-content{overflow-x:hidden}.ivu-layout-footer,.ivu-layout-header{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ivu-layout-header{background:#515a6e;padding:0 50px;height:64px;line-height:64px}.ivu-layout-sider{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;position:relative;background:#515a6e;min-width:0}.ivu-layout-sider-children{height:100%;padding-top:.1px;margin-top:-.1px}.ivu-layout-sider-has-trigger{padding-bottom:48px}.ivu-layout-sider-trigger{position:fixed;bottom:0;text-align:center;cursor:pointer;height:48px;line-height:48px;color:#fff;background:#515a6e;z-index:1000;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-layout-sider-trigger .ivu-icon{font-size:16px}.ivu-layout-sider-trigger>*{-webkit-transition:all .2s;transition:all .2s}.ivu-layout-sider-trigger-collapsed .ivu-layout-sider-trigger-icon{-webkit-transform:rotateZ(180deg);-ms-transform:rotate(180deg);transform:rotateZ(180deg)}.ivu-layout-sider-zero-width>*{overflow:hidden}.ivu-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;text-align:center;width:36px;height:42px;line-height:42px;background:#515a6e;color:#fff;font-size:18px;border-radius:0 6px 6px 0;cursor:pointer;-webkit-transition:background .3s ease;transition:background .3s ease}.ivu-layout-sider-zero-width-trigger:hover{background:#626b7d}.ivu-layout-sider-zero-width-trigger.ivu-layout-sider-zero-width-trigger-left{right:0;left:-36px;border-radius:6px 0 0 6px}.ivu-layout-footer{background:#f5f7f9;padding:24px 50px;color:#515a6e;font-size:14px}.ivu-layout-content{-webkit-box-flex:1;-ms-flex:auto;flex:auto}.ivu-loading-bar{width:100%;position:fixed;top:0;left:0;right:0;z-index:2000}.ivu-loading-bar-inner{-webkit-transition:width .2s linear;transition:width .2s linear}.ivu-loading-bar-inner-color-primary{background-color:#2d8cf0}.ivu-loading-bar-inner-failed-color-error{background-color:#ed4014}.ivu-progress{display:inline-block;width:100%;font-size:12px;position:relative}.ivu-progress-vertical{height:100%;width:auto}.ivu-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ivu-progress-show-info .ivu-progress-outer{padding-right:55px;margin-right:-55px}.ivu-progress-vertical .ivu-progress-outer{height:100%;width:auto}.ivu-progress-inner{display:inline-block;width:100%;background-color:#f3f3f3;border-radius:100px;vertical-align:middle;position:relative}.ivu-progress-inner-text{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 6px}.ivu-progress-vertical .ivu-progress-inner{height:100%;width:auto}.ivu-progress-vertical .ivu-progress-inner:after,.ivu-progress-vertical .ivu-progress-inner>*{display:inline-block;vertical-align:bottom}.ivu-progress-vertical .ivu-progress-inner:after{content:'';height:100%}.ivu-progress-bg{text-align:right;border-radius:100px;background-color:#2d8cf0;-webkit-transition:all .2s linear;transition:all .2s linear;position:relative}.ivu-progress-bg:after{content:'';display:inline-block;height:100%;vertical-align:middle}.ivu-progress-success-bg{border-radius:100px;background-color:#19be6b;-webkit-transition:all .2s linear;transition:all .2s linear;position:absolute;top:0;left:0}.ivu-progress-text{display:inline-block;margin-left:5px;text-align:left;font-size:1em;vertical-align:middle}.ivu-progress-active .ivu-progress-bg:before{content:'';opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;background:#fff;border-radius:10px;-webkit-animation:ivu-progress-active 2s ease-in-out infinite;animation:ivu-progress-active 2s ease-in-out infinite}.ivu-progress-vertical.ivu-progress-active .ivu-progress-bg:before{top:auto;-webkit-animation:ivu-progress-active-vertical 2s ease-in-out infinite;animation:ivu-progress-active-vertical 2s ease-in-out infinite}.ivu-progress-wrong .ivu-progress-bg{background-color:#ed4014}.ivu-progress-wrong .ivu-progress-text{color:#ed4014}.ivu-progress-success .ivu-progress-bg{background-color:#19be6b}.ivu-progress-success .ivu-progress-text{color:#19be6b}@-webkit-keyframes ivu-progress-active{0%{opacity:.3;width:0}100%{opacity:0;width:100%}}@keyframes ivu-progress-active{0%{opacity:.3;width:0}100%{opacity:0;width:100%}}@-webkit-keyframes ivu-progress-active-vertical{0%{opacity:.3;height:0}100%{opacity:0;height:100%}}@keyframes ivu-progress-active-vertical{0%{opacity:.3;height:0}100%{opacity:0;height:100%}}.ivu-timeline{list-style:none;margin:0;padding:0}.ivu-timeline-item{margin:0!important;padding:0 0 12px 0;list-style:none;position:relative}.ivu-timeline-item-tail{height:100%;border-left:1px solid #e8eaec;position:absolute;left:6px;top:0}.ivu-timeline-item-pending .ivu-timeline-item-tail{display:none}.ivu-timeline-item-head{width:13px;height:13px;background-color:#fff;border-radius:50%;border:1px solid transparent;position:absolute}.ivu-timeline-item-head-blue{border-color:#2d8cf0;color:#2d8cf0}.ivu-timeline-item-head-red{border-color:#ed4014;color:#ed4014}.ivu-timeline-item-head-green{border-color:#19be6b;color:#19be6b}.ivu-timeline-item-head-custom{width:40px;height:auto;margin-top:6px;padding:3px 0;text-align:center;line-height:1;border:0;border-radius:0;font-size:14px;position:absolute;left:-13px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ivu-timeline-item-content{padding:1px 1px 10px 24px;font-size:12px;position:relative;top:-3px}.ivu-timeline-item:last-child .ivu-timeline-item-tail{display:none}.ivu-timeline.ivu-timeline-pending .ivu-timeline-item:nth-last-of-type(2) .ivu-timeline-item-tail{border-left:1px dotted #e8eaec}.ivu-timeline.ivu-timeline-pending .ivu-timeline-item:nth-last-of-type(2) .ivu-timeline-item-content{min-height:48px}.ivu-page:after{content:'';display:block;height:0;clear:both;overflow:hidden;visibility:hidden}.ivu-page-item{display:inline-block;vertical-align:middle;min-width:32px;height:32px;line-height:30px;margin-right:4px;text-align:center;list-style:none;background-color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;font-family:Arial;font-weight:500;border:1px solid #dcdee2;border-radius:4px;-webkit-transition:border .2s ease-in-out,color .2s ease-in-out;transition:border .2s ease-in-out,color .2s ease-in-out}.ivu-page-item a{font-family:"Monospaced Number";margin:0 6px;text-decoration:none;color:#515a6e}.ivu-page-item:hover{border-color:#2d8cf0}.ivu-page-item:hover a{color:#2d8cf0}.ivu-page-item-active{border-color:#2d8cf0}.ivu-page-item-active a,.ivu-page-item-active:hover a{color:#2d8cf0}.ivu-page-item-jump-next:after,.ivu-page-item-jump-prev:after{content:"•••";display:block;letter-spacing:1px;color:#ccc;text-align:center}.ivu-page-item-jump-next i,.ivu-page-item-jump-prev i{display:none}.ivu-page-item-jump-next:hover:after,.ivu-page-item-jump-prev:hover:after{display:none}.ivu-page-item-jump-next:hover i,.ivu-page-item-jump-prev:hover i{display:inline}.ivu-page-item-jump-prev:hover i:after{content:"\F115";margin-left:-8px}.ivu-page-item-jump-next:hover i:after{content:"\F11F";margin-left:-8px}.ivu-page-prev{margin-right:4px}.ivu-page-item-jump-next,.ivu-page-item-jump-prev{margin-right:4px}.ivu-page-item-jump-next,.ivu-page-item-jump-prev,.ivu-page-next,.ivu-page-prev{display:inline-block;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-width:32px;height:32px;line-height:30px;list-style:none;text-align:center;cursor:pointer;color:#666;font-family:Arial;border:1px solid #dcdee2;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-page-item-jump-next,.ivu-page-item-jump-prev{border-color:transparent}.ivu-page-next,.ivu-page-prev{background-color:#fff}.ivu-page-next a,.ivu-page-prev a{color:#666;font-size:14px}.ivu-page-next:hover,.ivu-page-prev:hover{border-color:#2d8cf0}.ivu-page-next:hover a,.ivu-page-prev:hover a{color:#2d8cf0}.ivu-page-disabled{cursor:not-allowed}.ivu-page-disabled a{color:#ccc}.ivu-page-disabled:hover{border-color:#dcdee2}.ivu-page-disabled:hover a{color:#ccc;cursor:not-allowed}.ivu-page-options{display:inline-block;vertical-align:middle;margin-left:15px}.ivu-page-options-sizer{display:inline-block;margin-right:10px}.ivu-page-options-elevator{display:inline-block;vertical-align:middle;height:32px;line-height:32px}.ivu-page-options-elevator input{display:inline-block;width:100%;height:32px;line-height:1.5;padding:4px 7px;font-size:12px;border:1px solid #dcdee2;color:#515a6e;background-color:#fff;background-image:none;position:relative;cursor:text;-webkit-transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;border-radius:4px;margin:0 8px;width:50px}.ivu-page-options-elevator input::-moz-placeholder{color:#c5c8ce;opacity:1}.ivu-page-options-elevator input:-ms-input-placeholder{color:#c5c8ce}.ivu-page-options-elevator input::-webkit-input-placeholder{color:#c5c8ce}.ivu-page-options-elevator input:hover{border-color:#57a3f3}.ivu-page-options-elevator input:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-page-options-elevator input[disabled],fieldset[disabled] .ivu-page-options-elevator input{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-page-options-elevator input[disabled]:hover,fieldset[disabled] .ivu-page-options-elevator input:hover{border-color:#e3e5e8}textarea.ivu-page-options-elevator input{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;font-size:14px}.ivu-page-options-elevator input-large{font-size:14px;padding:6px 7px;height:36px}.ivu-page-options-elevator input-small{padding:1px 7px;height:24px;border-radius:3px}.ivu-page-total{display:inline-block;height:32px;line-height:32px;margin-right:10px}.ivu-page-simple .ivu-page-next,.ivu-page-simple .ivu-page-prev{margin:0;border:0;height:24px;line-height:normal;font-size:18px}.ivu-page-simple .ivu-page-simple-pager{display:inline-block;margin-right:8px;vertical-align:middle}.ivu-page-simple .ivu-page-simple-pager input{width:30px;height:24px;margin:0 8px;padding:5px 8px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;outline:0;border:1px solid #dcdee2;border-radius:4px;-webkit-transition:border-color .2s ease-in-out;transition:border-color .2s ease-in-out}.ivu-page-simple .ivu-page-simple-pager input:hover{border-color:#2d8cf0}.ivu-page-simple .ivu-page-simple-pager span{padding:0 8px 0 2px}.ivu-page-custom-text,.ivu-page-custom-text:hover{border-color:transparent}.ivu-page.mini .ivu-page-total{height:24px;line-height:24px}.ivu-page.mini .ivu-page-item{border:0;margin:0;min-width:24px;height:24px;line-height:24px;border-radius:3px}.ivu-page.mini .ivu-page-next,.ivu-page.mini .ivu-page-prev{margin:0;min-width:24px;height:24px;line-height:22px;border:0}.ivu-page.mini .ivu-page-next a i:after,.ivu-page.mini .ivu-page-prev a i:after{height:24px;line-height:24px}.ivu-page.mini .ivu-page-item-jump-next,.ivu-page.mini .ivu-page-item-jump-prev{height:24px;line-height:24px;border:none;margin-right:0}.ivu-page.mini .ivu-page-options{margin-left:8px}.ivu-page.mini .ivu-page-options-elevator{height:24px;line-height:24px}.ivu-page.mini .ivu-page-options-elevator input{padding:1px 7px;height:24px;border-radius:3px;width:44px}.ivu-steps{font-size:0;width:100%;line-height:1.5}.ivu-steps-item{display:inline-block;position:relative;vertical-align:top}.ivu-steps-item.ivu-steps-status-wait .ivu-steps-head-inner{background-color:#fff}.ivu-steps-item.ivu-steps-status-wait .ivu-steps-head-inner span,.ivu-steps-item.ivu-steps-status-wait .ivu-steps-head-inner>.ivu-steps-icon{color:#ccc}.ivu-steps-item.ivu-steps-status-wait .ivu-steps-title{color:#999}.ivu-steps-item.ivu-steps-status-wait .ivu-steps-content{color:#999}.ivu-steps-item.ivu-steps-status-wait .ivu-steps-tail>i{background-color:#e8eaec}.ivu-steps-item.ivu-steps-status-process .ivu-steps-head-inner{border-color:#2d8cf0;background-color:#2d8cf0}.ivu-steps-item.ivu-steps-status-process .ivu-steps-head-inner span,.ivu-steps-item.ivu-steps-status-process .ivu-steps-head-inner>.ivu-steps-icon{color:#fff}.ivu-steps-item.ivu-steps-status-process .ivu-steps-title{color:#666}.ivu-steps-item.ivu-steps-status-process .ivu-steps-content{color:#666}.ivu-steps-item.ivu-steps-status-process .ivu-steps-tail>i{background-color:#e8eaec}.ivu-steps-item.ivu-steps-status-finish .ivu-steps-head-inner{background-color:#fff;border-color:#2d8cf0}.ivu-steps-item.ivu-steps-status-finish .ivu-steps-head-inner span,.ivu-steps-item.ivu-steps-status-finish .ivu-steps-head-inner>.ivu-steps-icon{color:#2d8cf0}.ivu-steps-item.ivu-steps-status-finish .ivu-steps-tail>i:after{width:100%;background:#2d8cf0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;opacity:1}.ivu-steps-item.ivu-steps-status-finish .ivu-steps-title{color:#999}.ivu-steps-item.ivu-steps-status-finish .ivu-steps-content{color:#999}.ivu-steps-item.ivu-steps-status-error .ivu-steps-head-inner{background-color:#fff;border-color:#ed4014}.ivu-steps-item.ivu-steps-status-error .ivu-steps-head-inner>.ivu-steps-icon{color:#ed4014}.ivu-steps-item.ivu-steps-status-error .ivu-steps-title{color:#ed4014}.ivu-steps-item.ivu-steps-status-error .ivu-steps-content{color:#ed4014}.ivu-steps-item.ivu-steps-status-error .ivu-steps-tail>i{background-color:#e8eaec}.ivu-steps-item.ivu-steps-next-error .ivu-steps-tail>i,.ivu-steps-item.ivu-steps-next-error .ivu-steps-tail>i:after{background-color:#ed4014}.ivu-steps-item.ivu-steps-custom .ivu-steps-head-inner{background:0 0;border:0;width:auto;height:auto}.ivu-steps-item.ivu-steps-custom .ivu-steps-head-inner>.ivu-steps-icon{font-size:20px;top:2px;width:20px;height:20px}.ivu-steps-item.ivu-steps-custom.ivu-steps-status-process .ivu-steps-head-inner>.ivu-steps-icon{color:#2d8cf0}.ivu-steps-item:last-child .ivu-steps-tail{display:none}.ivu-steps .ivu-steps-head,.ivu-steps .ivu-steps-main{position:relative;display:inline-block}.ivu-steps .ivu-steps-head-inner{display:block;width:26px;height:26px;line-height:24px;margin-right:8px;text-align:center;border:1px solid #ccc;border-radius:50%;font-size:14px;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.ivu-steps .ivu-steps-head-inner>.ivu-steps-icon{line-height:1;position:relative}.ivu-steps .ivu-steps-head-inner>.ivu-steps-icon.ivu-icon{font-size:24px}.ivu-steps .ivu-steps-head-inner>.ivu-steps-icon.ivu-icon-ios-checkmark-empty,.ivu-steps .ivu-steps-head-inner>.ivu-steps-icon.ivu-icon-ios-close-empty{font-weight:700}.ivu-steps .ivu-steps-main{margin-top:2.5px;display:inline}.ivu-steps .ivu-steps-custom .ivu-steps-title{margin-top:2.5px}.ivu-steps .ivu-steps-title{display:inline-block;margin-bottom:4px;padding-right:10px;font-size:14px;font-weight:700;color:#666}.ivu-steps .ivu-steps-title>a:first-child:last-child{color:#666}.ivu-steps .ivu-steps-item-last .ivu-steps-title{padding-right:0;width:100%}.ivu-steps .ivu-steps-content{font-size:12px;color:#999}.ivu-steps .ivu-steps-tail{width:100%;padding:0 10px;position:absolute;left:0;top:13px}.ivu-steps .ivu-steps-tail>i{display:inline-block;width:100%;height:1px;vertical-align:top;background:#e8eaec;border-radius:1px;position:relative}.ivu-steps .ivu-steps-tail>i:after{content:'';width:0;height:100%;background:#e8eaec;opacity:0;position:absolute;top:0}.ivu-steps.ivu-steps-small .ivu-steps-head-inner{width:18px;height:18px;line-height:16px;margin-right:10px;text-align:center;border-radius:50%;font-size:12px}.ivu-steps.ivu-steps-small .ivu-steps-head-inner>.ivu-steps-icon.ivu-icon{font-size:16px;top:0}.ivu-steps.ivu-steps-small .ivu-steps-main{margin-top:0}.ivu-steps.ivu-steps-small .ivu-steps-title{margin-bottom:4px;margin-top:0;color:#666;font-size:12px;font-weight:700}.ivu-steps.ivu-steps-small .ivu-steps-content{font-size:12px;color:#999;padding-left:30px}.ivu-steps.ivu-steps-small .ivu-steps-tail{top:8px;padding:0 8px}.ivu-steps.ivu-steps-small .ivu-steps-tail>i{height:1px;width:100%;border-radius:1px}.ivu-steps .ivu-steps-item.ivu-steps-custom .ivu-steps-head-inner,.ivu-steps.ivu-steps-small .ivu-steps-item.ivu-steps-custom .ivu-steps-head-inner{width:inherit;height:inherit;line-height:inherit;border-radius:0;border:0;background:0 0}.ivu-steps-vertical .ivu-steps-item{display:block}.ivu-steps-vertical .ivu-steps-tail{position:absolute;left:13px;top:0;height:100%;width:1px;padding:30px 0 4px 0}.ivu-steps-vertical .ivu-steps-tail>i{height:100%;width:1px}.ivu-steps-vertical .ivu-steps-tail>i:after{height:0;width:100%}.ivu-steps-vertical .ivu-steps-status-finish .ivu-steps-tail>i:after{height:100%}.ivu-steps-vertical .ivu-steps-head{float:left}.ivu-steps-vertical .ivu-steps-head-inner{margin-right:16px}.ivu-steps-vertical .ivu-steps-main{min-height:47px;overflow:hidden;display:block}.ivu-steps-vertical .ivu-steps-main .ivu-steps-title{line-height:26px}.ivu-steps-vertical .ivu-steps-main .ivu-steps-content{padding-bottom:12px;padding-left:0}.ivu-steps-vertical .ivu-steps-custom .ivu-steps-icon{left:4px}.ivu-steps-vertical.ivu-steps-small .ivu-steps-custom .ivu-steps-icon{left:0}.ivu-steps-vertical.ivu-steps-small .ivu-steps-tail{position:absolute;left:9px;top:0;padding:22px 0 4px 0}.ivu-steps-vertical.ivu-steps-small .ivu-steps-tail>i{height:100%}.ivu-steps-vertical.ivu-steps-small .ivu-steps-title{line-height:18px}.ivu-steps-horizontal.ivu-steps-hidden{visibility:hidden}.ivu-steps-horizontal .ivu-steps-tail{display:none}.ivu-steps-horizontal .ivu-steps-content{padding-left:45px}.ivu-steps-horizontal .ivu-steps-item:not(:first-child) .ivu-steps-head{padding-left:10px}.ivu-steps-horizontal .ivu-steps-item{overflow:hidden}.ivu-steps-horizontal .ivu-steps-item:last-child .ivu-steps-title:after{display:none}.ivu-steps-horizontal .ivu-steps-title{position:relative}.ivu-steps-horizontal .ivu-steps-title:after{content:'';position:absolute;width:9999px;height:1px;left:100%;top:50%;background:#e8eaec}.ivu-steps-horizontal .ivu-steps-status-finish .ivu-steps-title:after{background:#2d8cf0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;opacity:1}.ivu-modal{width:auto;margin:0 auto;position:relative;outline:0;top:100px}.ivu-modal-hidden{display:none!important}.ivu-modal-wrap{position:fixed;overflow:auto;top:0;right:0;bottom:0;left:0;z-index:1000;-webkit-overflow-scrolling:touch;outline:0}.ivu-modal-wrap *{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.ivu-modal-mask{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(55,55,55,.6);height:100%;z-index:1000}.ivu-modal-mask-hidden{display:none}.ivu-modal-content{position:relative;background-color:#fff;border:0;border-radius:6px;background-clip:padding-box;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.ivu-modal-content-no-mask{pointer-events:auto}.ivu-modal-content-drag{position:absolute}.ivu-modal-content-drag .ivu-modal-header{cursor:move}.ivu-modal-content-dragging{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-modal-header{border-bottom:1px solid #e8eaec;padding:14px 16px;line-height:1}.ivu-modal-header p,.ivu-modal-header-inner{display:inline-block;width:100%;height:20px;line-height:20px;font-size:14px;color:#17233d;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-modal-header p i,.ivu-modal-header p span{vertical-align:middle}.ivu-modal-close{z-index:1;font-size:12px;position:absolute;right:8px;top:8px;overflow:hidden;cursor:pointer}.ivu-modal-close .ivu-icon-ios-close{font-size:31px;color:#999;-webkit-transition:color .2s ease;transition:color .2s ease;position:relative;top:1px}.ivu-modal-close .ivu-icon-ios-close:hover{color:#444}.ivu-modal-body{padding:16px;font-size:12px;line-height:1.5}.ivu-modal-footer{border-top:1px solid #e8eaec;padding:12px 18px 12px 18px;text-align:right}.ivu-modal-footer button+button{margin-left:8px;margin-bottom:0}.ivu-modal-fullscreen{width:100%!important;top:0;bottom:0;position:absolute}.ivu-modal-fullscreen .ivu-modal-content{width:100%;border-radius:0;position:absolute;top:0;bottom:0}.ivu-modal-fullscreen .ivu-modal-body{width:100%;overflow:auto;position:absolute;top:51px;bottom:61px}.ivu-modal-fullscreen-no-header .ivu-modal-body{top:0}.ivu-modal-fullscreen-no-footer .ivu-modal-body{bottom:0}.ivu-modal-fullscreen .ivu-modal-footer{position:absolute;width:100%;bottom:0}.ivu-modal-no-mask{pointer-events:none}@media (max-width:576px){.ivu-modal{width:auto!important;margin:10px}.ivu-modal-fullscreen{width:100%!important;margin:0}.vertical-center-modal .ivu-modal{-webkit-box-flex:1;-ms-flex:1;flex:1}}.ivu-modal-confirm{padding:0 4px}.ivu-modal-confirm-head{padding:0 12px 0 0}.ivu-modal-confirm-head-icon{display:inline-block;font-size:28px;vertical-align:middle;position:relative;top:-2px}.ivu-modal-confirm-head-icon-info{color:#2d8cf0}.ivu-modal-confirm-head-icon-success{color:#19be6b}.ivu-modal-confirm-head-icon-warning{color:#f90}.ivu-modal-confirm-head-icon-error{color:#ed4014}.ivu-modal-confirm-head-icon-confirm{color:#f90}.ivu-modal-confirm-head-title{display:inline-block;vertical-align:middle;margin-left:12px;font-size:16px;color:#17233d;font-weight:700}.ivu-modal-confirm-body{padding-left:42px;font-size:14px;color:#515a6e;position:relative}.ivu-modal-confirm-body-render{margin:0;padding:0}.ivu-modal-confirm-footer{margin-top:20px;text-align:right}.ivu-modal-confirm-footer button+button{margin-left:8px;margin-bottom:0}.ivu-select{display:inline-block;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:middle;color:#515a6e;font-size:14px;line-height:normal}.ivu-select-selection{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;position:relative;background-color:#fff;border-radius:4px;border:1px solid #dcdee2;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-select-selection-focused,.ivu-select-selection:hover{border-color:#57a3f3}.ivu-select-selection-focused .ivu-select-arrow,.ivu-select-selection:hover .ivu-select-arrow{display:inline-block}.ivu-select-arrow{position:absolute;top:50%;right:8px;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:14px;color:#808695;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-select-visible .ivu-select-selection{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-select-visible .ivu-select-arrow{-webkit-transform:translateY(-50%) rotate(180deg);-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg);display:inline-block}.ivu-select-disabled .ivu-select-selection{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-select-disabled .ivu-select-selection:hover{border-color:#e3e5e8}.ivu-select-disabled .ivu-select-selection .ivu-select-arrow{color:#ccc}.ivu-select-disabled .ivu-select-selection:hover{border-color:#dcdee2;-webkit-box-shadow:none;box-shadow:none}.ivu-select-disabled .ivu-select-selection:hover .ivu-select-arrow{display:inline-block}.ivu-select-single .ivu-select-selection{height:32px;position:relative}.ivu-select-single .ivu-select-selection .ivu-select-placeholder{color:#c5c8ce}.ivu-select-single .ivu-select-selection .ivu-select-placeholder,.ivu-select-single .ivu-select-selection .ivu-select-selected-value{display:block;height:30px;line-height:30px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:8px;padding-right:24px}.ivu-select-multiple .ivu-select-selection{padding:0 24px 0 4px}.ivu-select-multiple .ivu-select-selection .ivu-select-placeholder{display:block;height:30px;line-height:30px;color:#c5c8ce;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:4px;padding-right:22px}.ivu-select-large.ivu-select-single .ivu-select-selection{height:36px}.ivu-select-large.ivu-select-single .ivu-select-selection .ivu-select-placeholder,.ivu-select-large.ivu-select-single .ivu-select-selection .ivu-select-selected-value{height:34px;line-height:34px;font-size:14px}.ivu-select-large.ivu-select-multiple .ivu-select-selection{min-height:36px}.ivu-select-large.ivu-select-multiple .ivu-select-selection .ivu-select-placeholder,.ivu-select-large.ivu-select-multiple .ivu-select-selection .ivu-select-selected-value{min-height:34px;line-height:34px;font-size:14px}.ivu-select-small.ivu-select-single .ivu-select-selection{height:24px;border-radius:3px}.ivu-select-small.ivu-select-single .ivu-select-selection .ivu-select-placeholder,.ivu-select-small.ivu-select-single .ivu-select-selection .ivu-select-selected-value{height:22px;line-height:22px}.ivu-select-small.ivu-select-multiple .ivu-select-selection{min-height:24px;border-radius:3px}.ivu-select-small.ivu-select-multiple .ivu-select-selection .ivu-select-placeholder,.ivu-select-small.ivu-select-multiple .ivu-select-selection .ivu-select-selected-value{height:auto;min-height:22px;line-height:22px}.ivu-select-input{display:inline-block;height:32px;line-height:32px;padding:0 24px 0 8px;font-size:12px;outline:0;border:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:#515a6e;background-color:transparent;position:relative;cursor:pointer}.ivu-select-input::-moz-placeholder{color:#c5c8ce;opacity:1}.ivu-select-input:-ms-input-placeholder{color:#c5c8ce}.ivu-select-input::-webkit-input-placeholder{color:#c5c8ce}.ivu-select-input[disabled]{cursor:not-allowed;color:#ccc;-webkit-text-fill-color:#ccc}.ivu-select-single .ivu-select-input{width:100%}.ivu-select-large .ivu-select-input{font-size:14px;height:36px}.ivu-select-small .ivu-select-input{height:22px;line-height:22px}.ivu-select-multiple .ivu-select-input{height:30px;line-height:32px;padding:0 0 0 4px}.ivu-select-not-found{text-align:center;color:#c5c8ce}.ivu-select-not-found li:not([class^=ivu-]){margin-bottom:0}.ivu-select-loading{text-align:center;color:#c5c8ce}.ivu-select-multiple .ivu-tag{height:24px;line-height:22px;margin:3px 4px 3px 0;max-width:99%;position:relative}.ivu-select-multiple .ivu-tag span:not(.ivu-select-max-tag){display:block;margin-right:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-select-multiple .ivu-tag i{display:block;position:absolute;right:4px;top:4px}.ivu-select-large.ivu-select-multiple .ivu-tag{height:28px;line-height:26px;font-size:14px}.ivu-select-large.ivu-select-multiple .ivu-tag i{top:6px}.ivu-select-small.ivu-select-multiple .ivu-tag{height:17px;line-height:15px;font-size:12px;padding:0 6px;margin:3px 4px 2px 0}.ivu-select-small.ivu-select-multiple .ivu-tag span{margin-right:14px}.ivu-select-small.ivu-select-multiple .ivu-tag i{top:1px;right:2px}.ivu-select-dropdown-list{min-width:100%;list-style:none}.ivu-select .ivu-select-dropdown{width:auto}.ivu-select-prefix{display:inline-block;vertical-align:middle}.ivu-select-prefix i{vertical-align:top}.ivu-select-head-with-prefix{display:inline-block!important;vertical-align:middle}.ivu-select-single .ivu-select-prefix{padding-left:4px}.ivu-select-multiple .ivu-select-head-with-prefix,.ivu-select-single .ivu-select-head-with-prefix{padding-left:0!important}.ivu-select-head-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ivu-select-multiple .ivu-select-head-flex .ivu-select-prefix{margin-right:4px}.ivu-select-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-select-item:hover{background:#f3f3f3}.ivu-select-item-focus{background:#f3f3f3}.ivu-select-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-select-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-select-item-selected,.ivu-select-item-selected:hover{color:#2d8cf0}.ivu-select-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-select-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-select-large .ivu-select-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-select-item{white-space:normal}}.ivu-select-multiple .ivu-select-item{position:relative}.ivu-select-multiple .ivu-select-item-selected{color:rgba(45,140,240,.9);background:#fff}.ivu-select-multiple .ivu-select-item-focus,.ivu-select-multiple .ivu-select-item-selected:hover{background:#f3f3f3}.ivu-select-multiple .ivu-select-item-selected.ivu-select-multiple .ivu-select-item-focus{color:rgba(40,123,211,.91);background:#fff}.ivu-select-multiple .ivu-select-item-selected:after{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;font-size:24px;content:'\F171';color:rgba(45,140,240,.9);position:absolute;top:2px;right:8px}.ivu-select-group{list-style:none;margin:0;padding:0}.ivu-select-group-title{padding-left:8px;font-size:12px;color:#999;height:30px;line-height:30px}.ivu-form-item-error .ivu-select-selection{border:1px solid #ed4014}.ivu-form-item-error .ivu-select-arrow{color:#ed4014}.ivu-form-item-error .ivu-select-visible .ivu-select-selection{border-color:#ed4014;outline:0;-webkit-box-shadow:0 0 0 2px rgba(237,64,20,.2);box-shadow:0 0 0 2px rgba(237,64,20,.2)}.ivu-select-dropdown{width:inherit;max-height:200px;overflow:auto;margin:5px 0;padding:5px 0;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);position:absolute;z-index:900}.ivu-select-dropdown-transfer{z-index:1060;width:auto}.ivu-select-dropdown.ivu-transfer-no-max-height{max-height:none}.ivu-modal .ivu-select-dropdown{position:absolute!important}.ivu-split-wrapper{position:relative;width:100%;height:100%}.ivu-split-pane{position:absolute}.ivu-split-pane.left-pane,.ivu-split-pane.right-pane{top:0;bottom:0}.ivu-split-pane.left-pane{left:0}.ivu-split-pane.right-pane{right:0}.ivu-split-pane.bottom-pane,.ivu-split-pane.top-pane{left:0;right:0}.ivu-split-pane.top-pane{top:0}.ivu-split-pane.bottom-pane{bottom:0}.ivu-split-pane-moving{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-split-trigger{border:1px solid #dcdee2}.ivu-split-trigger-con{position:absolute;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:10}.ivu-split-trigger-bar-con{position:absolute;overflow:hidden}.ivu-split-trigger-bar-con.vertical{left:1px;top:50%;height:32px;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.ivu-split-trigger-bar-con.horizontal{left:50%;top:1px;width:32px;-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);transform:translate(-50%,0)}.ivu-split-trigger-vertical{width:6px;height:100%;background:#f8f8f9;border-top:none;border-bottom:none;cursor:col-resize}.ivu-split-trigger-vertical .ivu-split-trigger-bar{width:4px;height:1px;background:rgba(23,35,61,.25);float:left;margin-top:3px}.ivu-split-trigger-horizontal{height:6px;width:100%;background:#f8f8f9;border-left:none;border-right:none;cursor:row-resize}.ivu-split-trigger-horizontal .ivu-split-trigger-bar{height:4px;width:1px;background:rgba(23,35,61,.25);float:left;margin-right:3px}.ivu-split-horizontal>.ivu-split-trigger-con{top:50%;height:100%;width:0}.ivu-split-vertical>.ivu-split-trigger-con{left:50%;height:0;width:100%}.ivu-split .no-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-tooltip{display:inline-block}.ivu-tooltip-rel{display:inline-block;position:relative;width:inherit}.ivu-tooltip-popper{display:block;visibility:visible;font-size:12px;line-height:1.5;position:absolute;z-index:1060}.ivu-tooltip-popper[x-placement^=top]{padding:5px 0 8px 0}.ivu-tooltip-popper[x-placement^=right]{padding:0 5px 0 8px}.ivu-tooltip-popper[x-placement^=bottom]{padding:8px 0 5px 0}.ivu-tooltip-popper[x-placement^=left]{padding:0 8px 0 5px}.ivu-tooltip-popper[x-placement^=top] .ivu-tooltip-arrow{bottom:3px;border-width:5px 5px 0;border-top-color:rgba(70,76,91,.9)}.ivu-tooltip-popper[x-placement=top] .ivu-tooltip-arrow{left:50%;margin-left:-5px}.ivu-tooltip-popper[x-placement=top-start] .ivu-tooltip-arrow{left:16px}.ivu-tooltip-popper[x-placement=top-end] .ivu-tooltip-arrow{right:16px}.ivu-tooltip-popper[x-placement^=right] .ivu-tooltip-arrow{left:3px;border-width:5px 5px 5px 0;border-right-color:rgba(70,76,91,.9)}.ivu-tooltip-popper[x-placement=right] .ivu-tooltip-arrow{top:50%;margin-top:-5px}.ivu-tooltip-popper[x-placement=right-start] .ivu-tooltip-arrow{top:8px}.ivu-tooltip-popper[x-placement=right-end] .ivu-tooltip-arrow{bottom:8px}.ivu-tooltip-popper[x-placement^=left] .ivu-tooltip-arrow{right:3px;border-width:5px 0 5px 5px;border-left-color:rgba(70,76,91,.9)}.ivu-tooltip-popper[x-placement=left] .ivu-tooltip-arrow{top:50%;margin-top:-5px}.ivu-tooltip-popper[x-placement=left-start] .ivu-tooltip-arrow{top:8px}.ivu-tooltip-popper[x-placement=left-end] .ivu-tooltip-arrow{bottom:8px}.ivu-tooltip-popper[x-placement^=bottom] .ivu-tooltip-arrow{top:3px;border-width:0 5px 5px;border-bottom-color:rgba(70,76,91,.9)}.ivu-tooltip-popper[x-placement=bottom] .ivu-tooltip-arrow{left:50%;margin-left:-5px}.ivu-tooltip-popper[x-placement=bottom-start] .ivu-tooltip-arrow{left:16px}.ivu-tooltip-popper[x-placement=bottom-end] .ivu-tooltip-arrow{right:16px}.ivu-tooltip-light.ivu-tooltip-popper{display:block;visibility:visible;font-size:12px;line-height:1.5;position:absolute;z-index:1060}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=top]{padding:7px 0 10px 0}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=right]{padding:0 7px 0 10px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=bottom]{padding:10px 0 7px 0}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=left]{padding:0 10px 0 7px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=top] .ivu-tooltip-arrow{bottom:3px;border-width:7px 7px 0;border-top-color:rgba(217,217,217,.5)}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=top] .ivu-tooltip-arrow{left:50%;margin-left:-7px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=top-start] .ivu-tooltip-arrow{left:16px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=top-end] .ivu-tooltip-arrow{right:16px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=right] .ivu-tooltip-arrow{left:3px;border-width:7px 7px 7px 0;border-right-color:rgba(217,217,217,.5)}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=right] .ivu-tooltip-arrow{top:50%;margin-top:-7px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=right-start] .ivu-tooltip-arrow{top:8px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=right-end] .ivu-tooltip-arrow{bottom:8px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=left] .ivu-tooltip-arrow{right:3px;border-width:7px 0 7px 7px;border-left-color:rgba(217,217,217,.5)}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=left] .ivu-tooltip-arrow{top:50%;margin-top:-7px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=left-start] .ivu-tooltip-arrow{top:8px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=left-end] .ivu-tooltip-arrow{bottom:8px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=bottom] .ivu-tooltip-arrow{top:3px;border-width:0 7px 7px;border-bottom-color:rgba(217,217,217,.5)}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=bottom] .ivu-tooltip-arrow{left:50%;margin-left:-7px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=bottom-start] .ivu-tooltip-arrow{left:16px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement=bottom-end] .ivu-tooltip-arrow{right:16px}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=top] .ivu-tooltip-arrow:after{content:" ";bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-width:7px;border-top-color:#fff}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=right] .ivu-tooltip-arrow:after{content:" ";left:1px;bottom:-7px;border-left-width:0;border-right-width:7px;border-right-color:#fff}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=bottom] .ivu-tooltip-arrow:after{content:" ";top:1px;margin-left:-7px;border-top-width:0;border-bottom-width:7px;border-bottom-color:#fff}.ivu-tooltip-light.ivu-tooltip-popper[x-placement^=left] .ivu-tooltip-arrow:after{content:" ";right:1px;border-right-width:0;border-left-width:7px;border-left-color:#fff;bottom:-7px}.ivu-tooltip-inner{max-width:250px;min-height:34px;padding:8px 12px;color:#fff;text-align:left;text-decoration:none;background-color:rgba(70,76,91,.9);border-radius:4px;-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);white-space:nowrap}.ivu-tooltip-inner-with-width{white-space:pre-wrap;text-align:justify}.ivu-tooltip-light .ivu-tooltip-inner{background-color:#fff;color:#515a6e}.ivu-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.ivu-tooltip-light .ivu-tooltip-arrow{border-width:8px}.ivu-tooltip-light .ivu-tooltip-arrow:after{display:block;width:0;height:0;position:absolute;border-color:transparent;border-style:solid;content:"";border-width:7px}.ivu-poptip{display:inline-block}.ivu-poptip-rel{display:inline-block;position:relative}.ivu-poptip-title{margin:0;padding:8px 16px;position:relative}.ivu-poptip-title:after{content:'';display:block;height:1px;position:absolute;left:8px;right:8px;bottom:0;background-color:#e8eaec}.ivu-poptip-title-inner{color:#17233d;font-size:14px}.ivu-poptip-body{padding:8px 16px}.ivu-poptip-body-content{overflow:auto}.ivu-poptip-body-content-word-wrap{white-space:pre-wrap;text-align:justify}.ivu-poptip-body-content-inner{color:#515a6e}.ivu-poptip-inner{width:100%;background-color:#fff;background-clip:padding-box;border-radius:4px;-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);white-space:nowrap}.ivu-poptip-popper{min-width:150px;display:block;visibility:visible;font-size:12px;line-height:1.5;position:absolute;z-index:1060}.ivu-poptip-popper[x-placement^=top]{padding:7px 0 10px 0}.ivu-poptip-popper[x-placement^=right]{padding:0 7px 0 10px}.ivu-poptip-popper[x-placement^=bottom]{padding:10px 0 7px 0}.ivu-poptip-popper[x-placement^=left]{padding:0 10px 0 7px}.ivu-poptip-popper[x-placement^=top] .ivu-poptip-arrow{bottom:3px;border-width:7px 7px 0;border-top-color:rgba(217,217,217,.5)}.ivu-poptip-popper[x-placement=top] .ivu-poptip-arrow{left:50%;margin-left:-7px}.ivu-poptip-popper[x-placement=top-start] .ivu-poptip-arrow{left:16px}.ivu-poptip-popper[x-placement=top-end] .ivu-poptip-arrow{right:16px}.ivu-poptip-popper[x-placement^=right] .ivu-poptip-arrow{left:3px;border-width:7px 7px 7px 0;border-right-color:rgba(217,217,217,.5)}.ivu-poptip-popper[x-placement=right] .ivu-poptip-arrow{top:50%;margin-top:-7px}.ivu-poptip-popper[x-placement=right-start] .ivu-poptip-arrow{top:8px}.ivu-poptip-popper[x-placement=right-end] .ivu-poptip-arrow{bottom:8px}.ivu-poptip-popper[x-placement^=left] .ivu-poptip-arrow{right:3px;border-width:7px 0 7px 7px;border-left-color:rgba(217,217,217,.5)}.ivu-poptip-popper[x-placement=left] .ivu-poptip-arrow{top:50%;margin-top:-7px}.ivu-poptip-popper[x-placement=left-start] .ivu-poptip-arrow{top:8px}.ivu-poptip-popper[x-placement=left-end] .ivu-poptip-arrow{bottom:8px}.ivu-poptip-popper[x-placement^=bottom] .ivu-poptip-arrow{top:3px;border-width:0 7px 7px;border-bottom-color:rgba(217,217,217,.5)}.ivu-poptip-popper[x-placement=bottom] .ivu-poptip-arrow{left:50%;margin-left:-7px}.ivu-poptip-popper[x-placement=bottom-start] .ivu-poptip-arrow{left:16px}.ivu-poptip-popper[x-placement=bottom-end] .ivu-poptip-arrow{right:16px}.ivu-poptip-popper[x-placement^=top] .ivu-poptip-arrow:after{content:" ";bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-width:7px;border-top-color:#fff}.ivu-poptip-popper[x-placement^=right] .ivu-poptip-arrow:after{content:" ";left:1px;bottom:-7px;border-left-width:0;border-right-width:7px;border-right-color:#fff}.ivu-poptip-popper[x-placement^=bottom] .ivu-poptip-arrow:after{content:" ";top:1px;margin-left:-7px;border-top-width:0;border-bottom-width:7px;border-bottom-color:#fff}.ivu-poptip-popper[x-placement^=left] .ivu-poptip-arrow:after{content:" ";right:1px;border-right-width:0;border-left-width:7px;border-left-color:#fff;bottom:-7px}.ivu-poptip-arrow,.ivu-poptip-arrow:after{display:block;width:0;height:0;position:absolute;border-color:transparent;border-style:solid}.ivu-poptip-arrow{border-width:8px}.ivu-poptip-arrow:after{content:"";border-width:7px}.ivu-poptip-confirm .ivu-poptip-popper{max-width:300px}.ivu-poptip-confirm .ivu-poptip-inner{white-space:normal}.ivu-poptip-confirm .ivu-poptip-body{padding:16px 16px 8px}.ivu-poptip-confirm .ivu-poptip-body .ivu-icon{font-size:16px;color:#f90;line-height:18px;position:absolute}.ivu-poptip-confirm .ivu-poptip-body-message{padding-left:20px}.ivu-poptip-confirm .ivu-poptip-footer{text-align:right;padding:8px 16px 16px}.ivu-poptip-confirm .ivu-poptip-footer button{margin-left:4px}.ivu-input{display:inline-block;width:100%;height:32px;line-height:1.5;padding:4px 7px;font-size:12px;border:1px solid #dcdee2;border-radius:4px;color:#515a6e;background-color:#fff;background-image:none;position:relative;cursor:text;-webkit-transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-input::-moz-placeholder{color:#c5c8ce;opacity:1}.ivu-input:-ms-input-placeholder{color:#c5c8ce}.ivu-input::-webkit-input-placeholder{color:#c5c8ce}.ivu-input:hover{border-color:#57a3f3}.ivu-input:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-input[disabled],fieldset[disabled] .ivu-input{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-input[disabled]:hover,fieldset[disabled] .ivu-input:hover{border-color:#e3e5e8}textarea.ivu-input{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;font-size:14px}.ivu-input-large{font-size:14px;padding:6px 7px;height:36px}.ivu-input-small{padding:1px 7px;height:24px;border-radius:3px}.ivu-input-wrapper{display:inline-block;width:100%;position:relative;vertical-align:middle;line-height:normal}.ivu-input-icon{width:32px;height:32px;line-height:32px;font-size:16px;text-align:center;color:#808695;position:absolute;right:0;z-index:3}.ivu-input-hide-icon .ivu-input-icon{display:none}.ivu-input-icon-validate{display:none}.ivu-input-icon-clear{display:none}.ivu-input-wrapper:hover .ivu-input-icon-clear{display:inline-block}.ivu-input-icon-normal+.ivu-input{padding-right:32px}.ivu-input-hide-icon .ivu-input-icon-normal+.ivu-input{padding-right:7px}.ivu-input-wrapper-large .ivu-input-icon{font-size:18px;height:36px;line-height:36px}.ivu-input-wrapper-small .ivu-input-icon{width:24px;font-size:14px;height:24px;line-height:24px}.ivu-input-prefix,.ivu-input-suffix{width:32px;height:100%;text-align:center;position:absolute;left:0;top:0;z-index:1}.ivu-input-prefix i,.ivu-input-suffix i{font-size:16px;line-height:32px;color:#808695}.ivu-input-suffix{left:auto;right:0}.ivu-input-wrapper-small .ivu-input-prefix i,.ivu-input-wrapper-small .ivu-input-suffix i{font-size:14px;line-height:24px}.ivu-input-wrapper-large .ivu-input-prefix i,.ivu-input-wrapper-large .ivu-input-suffix i{font-size:18px;line-height:36px}.ivu-input-with-prefix{padding-left:32px}.ivu-input-with-suffix{padding-right:32px}.ivu-input-search{cursor:pointer;padding:0 16px!important;background:#2d8cf0!important;color:#fff!important;border-color:#2d8cf0!important;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;position:relative;z-index:2}.ivu-input-search i{font-size:16px}.ivu-input-search:hover{background:#57a3f3!important;border-color:#57a3f3!important}.ivu-input-search:active{background:#2b85e4!important;border-color:#2b85e4!important}.ivu-input-search-icon{cursor:pointer;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-input-search-icon:hover{color:inherit}.ivu-input-search:before{content:'';display:block;width:1px;position:absolute;top:-1px;bottom:-1px;left:-1px;background:inherit}.ivu-input-wrapper-small .ivu-input-search{padding:0 12px!important}.ivu-input-wrapper-small .ivu-input-search i{font-size:14px}.ivu-input-wrapper-large .ivu-input-search{padding:0 20px!important}.ivu-input-wrapper-large .ivu-input-search i{font-size:18px}.ivu-input-with-search:hover .ivu-input{border-color:#57a3f3}.ivu-input-group{display:table;width:100%;border-collapse:separate;position:relative;font-size:12px;top:1px}.ivu-input-group-large{font-size:14px}.ivu-input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.ivu-input-group>[class*=col-]{padding-right:8px}.ivu-input-group-append,.ivu-input-group-prepend,.ivu-input-group>.ivu-input{display:table-cell}.ivu-input-group-with-prepend .ivu-input,.ivu-input-group-with-prepend.ivu-input-group-small .ivu-input{border-top-left-radius:0;border-bottom-left-radius:0}.ivu-input-group-with-append .ivu-input,.ivu-input-group-with-append.ivu-input-group-small .ivu-input{border-top-right-radius:0;border-bottom-right-radius:0}.ivu-input-group-append .ivu-btn,.ivu-input-group-prepend .ivu-btn{border-color:transparent;background-color:transparent;color:inherit;margin:-6px -7px}.ivu-input-group-append,.ivu-input-group-prepend{width:1px;white-space:nowrap;vertical-align:middle}.ivu-input-group .ivu-input,.ivu-input-group .ivu-input-inner-container{width:100%;float:left;margin-bottom:0;position:relative;z-index:2}.ivu-input-group-append,.ivu-input-group-prepend{padding:4px 7px;font-size:inherit;font-weight:400;line-height:1;color:#515a6e;text-align:center;background-color:#f8f8f9;border:1px solid #dcdee2;border-radius:4px}.ivu-input-group-append .ivu-select,.ivu-input-group-prepend .ivu-select{margin:-5px -7px}.ivu-input-group-append .ivu-select-selection,.ivu-input-group-prepend .ivu-select-selection{background-color:inherit;margin:-1px;border:1px solid transparent}.ivu-input-group-append .ivu-select-visible .ivu-select-selection,.ivu-input-group-prepend .ivu-select-visible .ivu-select-selection{-webkit-box-shadow:none;box-shadow:none}.ivu-input-group-prepend,.ivu-input-group>.ivu-input:first-child,.ivu-input-group>span>.ivu-input:first-child{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.ivu-input-group-prepend .ivu--select .ivu--select-selection,.ivu-input-group>.ivu-input:first-child .ivu--select .ivu--select-selection,.ivu-input-group>span>.ivu-input:first-child .ivu--select .ivu--select-selection{border-bottom-right-radius:0;border-top-right-radius:0}.ivu-input-group-prepend{border-right:0}.ivu-input-group-append{border-left:0}.ivu-input-group-append,.ivu-input-group>.ivu-input:last-child{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.ivu-input-group-append .ivu--select .ivu--select-selection,.ivu-input-group>.ivu-input:last-child .ivu--select .ivu--select-selection{border-bottom-left-radius:0;border-top-left-radius:0}.ivu-input-group-large .ivu-input,.ivu-input-group-large>.ivu-input-group-append,.ivu-input-group-large>.ivu-input-group-prepend{font-size:14px;padding:6px 7px;height:36px}.ivu-input-group-small .ivu-input,.ivu-input-group-small>.ivu-input-group-append,.ivu-input-group-small>.ivu-input-group-prepend{padding:1px 7px;height:24px;border-radius:3px}.ivu-form-item-error .ivu-input{border:1px solid #ed4014}.ivu-form-item-error .ivu-input:hover{border-color:#ed4014}.ivu-form-item-error .ivu-input:focus{border-color:#ed4014;outline:0;-webkit-box-shadow:0 0 0 2px rgba(237,64,20,.2);box-shadow:0 0 0 2px rgba(237,64,20,.2)}.ivu-form-item-error .ivu-input-icon{color:#ed4014}.ivu-form-item-error .ivu-input-group-append,.ivu-form-item-error .ivu-input-group-prepend{background-color:#fff;border:1px solid #ed4014}.ivu-form-item-error .ivu-input-group-append .ivu-select-selection,.ivu-form-item-error .ivu-input-group-prepend .ivu-select-selection{background-color:inherit;border:1px solid transparent}.ivu-form-item-error .ivu-input-group-prepend{border-right:0}.ivu-form-item-error .ivu-input-group-append{border-left:0}.ivu-form-item-error .ivu-transfer .ivu-input{display:inline-block;width:100%;height:32px;line-height:1.5;padding:4px 7px;font-size:12px;border:1px solid #dcdee2;border-radius:4px;color:#515a6e;background-color:#fff;background-image:none;position:relative;cursor:text;-webkit-transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-form-item-error .ivu-transfer .ivu-input::-moz-placeholder{color:#c5c8ce;opacity:1}.ivu-form-item-error .ivu-transfer .ivu-input:-ms-input-placeholder{color:#c5c8ce}.ivu-form-item-error .ivu-transfer .ivu-input::-webkit-input-placeholder{color:#c5c8ce}.ivu-form-item-error .ivu-transfer .ivu-input:hover{border-color:#57a3f3}.ivu-form-item-error .ivu-transfer .ivu-input:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-form-item-error .ivu-transfer .ivu-input[disabled],fieldset[disabled] .ivu-form-item-error .ivu-transfer .ivu-input{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-form-item-error .ivu-transfer .ivu-input[disabled]:hover,fieldset[disabled] .ivu-form-item-error .ivu-transfer .ivu-input:hover{border-color:#e3e5e8}textarea.ivu-form-item-error .ivu-transfer .ivu-input{max-width:100%;height:auto;min-height:32px;vertical-align:bottom;font-size:14px}.ivu-form-item-error .ivu-transfer .ivu-input-large{font-size:14px;padding:6px 7px;height:36px}.ivu-form-item-error .ivu-transfer .ivu-input-small{padding:1px 7px;height:24px;border-radius:3px}.ivu-form-item-error .ivu-transfer .ivu-input-icon{color:#808695}.ivu-form-item-validating .ivu-input-icon-validate{display:inline-block}.ivu-form-item-validating .ivu-input-icon+.ivu-input{padding-right:32px}.ivu-slider{line-height:normal}.ivu-slider-wrap{width:100%;height:4px;margin:16px 0;background-color:#e8eaec;border-radius:3px;vertical-align:middle;position:relative;cursor:pointer}.ivu-slider-button-wrap{width:18px;height:18px;text-align:center;background-color:transparent;position:absolute;top:-4px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ivu-slider-button-wrap .ivu-tooltip{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-slider-button{width:12px;height:12px;border:2px solid #57a3f3;border-radius:50%;background-color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear;outline:0}.ivu-slider-button-dragging,.ivu-slider-button:focus,.ivu-slider-button:hover{border-color:#2d8cf0;-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.ivu-slider-button:hover{cursor:-webkit-grab;cursor:grab}.ivu-slider-button-dragging,.ivu-slider-button-dragging:hover{cursor:-webkit-grabbing;cursor:grabbing}.ivu-slider-bar{height:4px;background:#57a3f3;border-radius:3px;position:absolute}.ivu-slider-stop{position:absolute;width:4px;height:4px;border-radius:50%;background-color:#ccc;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ivu-slider-marks{top:0;left:12px;width:18px;height:100%}.ivu-slider-marks-item{position:absolute;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#808695;margin-top:15px}.ivu-slider-disabled{cursor:not-allowed}.ivu-slider-disabled .ivu-slider-wrap{background-color:#ccc;cursor:not-allowed}.ivu-slider-disabled .ivu-slider-bar{background-color:#ccc}.ivu-slider-disabled .ivu-slider-button{border-color:#ccc}.ivu-slider-disabled .ivu-slider-button-dragging,.ivu-slider-disabled .ivu-slider-button:hover{border-color:#ccc}.ivu-slider-disabled .ivu-slider-button:hover{cursor:not-allowed}.ivu-slider-disabled .ivu-slider-button-dragging,.ivu-slider-disabled .ivu-slider-button-dragging:hover{cursor:not-allowed}.ivu-slider-input .ivu-slider-wrap{width:auto;margin-right:100px}.ivu-slider-input .ivu-input-number{float:right;margin-top:-14px}.selectDropDown{width:auto;padding:0;white-space:nowrap;overflow:visible}.ivu-cascader{line-height:normal}.ivu-cascader-rel{display:inline-block;width:100%;position:relative}.ivu-cascader .ivu-input{padding-right:24px;display:block;cursor:pointer}.ivu-cascader-disabled .ivu-input{cursor:not-allowed}.ivu-cascader-label{width:100%;height:100%;line-height:32px;padding:0 7px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;cursor:pointer;font-size:12px;position:absolute;left:0;top:0}.ivu-cascader-size-large .ivu-cascader-label{line-height:36px;font-size:14px}.ivu-cascader-size-small .ivu-cascader-label{line-height:26px}.ivu-cascader .ivu-cascader-arrow:nth-of-type(1){display:none;cursor:pointer}.ivu-cascader:hover .ivu-cascader-arrow:nth-of-type(1){display:inline-block}.ivu-cascader-show-clear:hover .ivu-cascader-arrow:nth-of-type(2){display:none}.ivu-cascader-arrow{position:absolute;top:50%;right:8px;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:14px;color:#808695;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-cascader-visible .ivu-cascader-arrow:nth-of-type(2){-webkit-transform:translateY(-50%) rotate(180deg);-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg)}.ivu-cascader .ivu-select-dropdown{width:auto;padding:0;white-space:nowrap;overflow:visible}.ivu-cascader .ivu-cascader-menu-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-cascader .ivu-cascader-menu-item:hover{background:#f3f3f3}.ivu-cascader .ivu-cascader-menu-item-focus{background:#f3f3f3}.ivu-cascader .ivu-cascader-menu-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-cascader .ivu-cascader-menu-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-cascader .ivu-cascader-menu-item-selected,.ivu-cascader .ivu-cascader-menu-item-selected:hover{color:#2d8cf0}.ivu-cascader .ivu-cascader-menu-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-cascader .ivu-cascader-menu-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-cascader .ivu-cascader-large .ivu-cascader-menu-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-cascader .ivu-cascader-menu-item{white-space:normal}}.ivu-cascader .ivu-select-item span{color:#ed4014}.ivu-cascader-dropdown{padding:5px 0}.ivu-cascader-dropdown .ivu-select-dropdown-list{max-height:190px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.ivu-cascader-not-found-tip{padding:5px 0;text-align:center;color:#c5c8ce}.ivu-cascader-not-found-tip li:not([class^=ivu-]){list-style:none;margin-bottom:0}.ivu-cascader-not-found .ivu-select-dropdown{width:inherit}.ivu-cascader-menu{display:inline-block;min-width:100px;height:180px;margin:0;padding:5px 0!important;vertical-align:top;list-style:none;border-right:1px solid #e8eaec;overflow:auto}.ivu-cascader-menu:last-child{border-right-color:transparent;margin-right:-1px}.ivu-cascader-menu .ivu-cascader-menu-item{position:relative;padding-right:36px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-cascader-menu .ivu-cascader-menu-item i{font-size:12px;position:absolute;right:15px;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ivu-cascader-menu .ivu-cascader-menu-item-loading{margin-top:-6px}.ivu-cascader-menu .ivu-cascader-menu-item-active{background-color:#f3f3f3;color:#2d8cf0}.ivu-cascader-transfer{z-index:1060;width:auto;padding:0;white-space:nowrap;overflow:visible}.ivu-cascader-transfer .ivu-cascader-menu-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-cascader-transfer .ivu-cascader-menu-item:hover{background:#f3f3f3}.ivu-cascader-transfer .ivu-cascader-menu-item-focus{background:#f3f3f3}.ivu-cascader-transfer .ivu-cascader-menu-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-cascader-transfer .ivu-cascader-menu-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-cascader-transfer .ivu-cascader-menu-item-selected,.ivu-cascader-transfer .ivu-cascader-menu-item-selected:hover{color:#2d8cf0}.ivu-cascader-transfer .ivu-cascader-menu-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-cascader-transfer .ivu-cascader-menu-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-cascader-transfer .ivu-cascader-large .ivu-cascader-menu-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-cascader-transfer .ivu-cascader-menu-item{white-space:normal}}.ivu-cascader-transfer .ivu-select-item span{color:#ed4014}.ivu-cascader-transfer .ivu-cascader-menu-item{padding-right:24px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-cascader-transfer .ivu-cascader-menu-item-active{background-color:#f3f3f3;color:#2d8cf0}.ivu-form-item-error .ivu-cascader-arrow{color:#ed4014}.ivu-transfer{position:relative;line-height:1.5}.ivu-transfer-list{display:inline-block;width:180px;height:210px;font-size:12px;vertical-align:middle;position:relative;padding-top:35px}.ivu-transfer-list-with-footer{padding-bottom:35px}.ivu-transfer-list-header{padding:8px 16px;background:#f9fafc;color:#515a6e;border:1px solid #dcdee2;border-bottom:1px solid #e8eaec;border-radius:6px 6px 0 0;overflow:hidden;position:absolute;top:0;left:0;width:100%}.ivu-transfer-list-header-title{cursor:pointer}.ivu-transfer-list-header>span{padding-left:4px}.ivu-transfer-list-header-count{margin:0!important;float:right}.ivu-transfer-list-body{height:100%;border:1px solid #dcdee2;border-top:none;border-radius:0 0 6px 6px;position:relative;overflow:hidden}.ivu-transfer-list-body-with-search{padding-top:34px}.ivu-transfer-list-body-with-footer{border-radius:0}.ivu-transfer-list-content{height:100%;padding:4px 0;overflow:auto}.ivu-transfer-list-content-item{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ivu-transfer-list-content-item>span{padding-left:4px}.ivu-transfer-list-content-not-found{display:none;text-align:center;color:#c5c8ce}li.ivu-transfer-list-content-not-found:only-child{display:block}.ivu-transfer-list-body-with-search .ivu-transfer-list-content{padding:6px 0 0}.ivu-transfer-list-body-search-wrapper{padding:8px 8px 0;position:absolute;top:0;left:0;right:0}.ivu-transfer-list-search{position:relative}.ivu-transfer-list-footer{border:1px solid #dcdee2;border-top:none;border-radius:0 0 6px 6px;position:absolute;bottom:0;left:0;right:0;zoom:1}.ivu-transfer-list-footer:after,.ivu-transfer-list-footer:before{content:"";display:table}.ivu-transfer-list-footer:after{clear:both;visibility:hidden;font-size:0;height:0}.ivu-transfer-operation{display:inline-block;margin:0 16px;vertical-align:middle}.ivu-transfer-operation .ivu-btn{display:block;min-width:24px}.ivu-transfer-operation .ivu-btn:first-child{margin-bottom:12px}.ivu-transfer-operation .ivu-btn span i,.ivu-transfer-operation .ivu-btn span span{vertical-align:middle}.ivu-transfer-list-content-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-transfer-list-content-item:hover{background:#f3f3f3}.ivu-transfer-list-content-item-focus{background:#f3f3f3}.ivu-transfer-list-content-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-transfer-list-content-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-transfer-list-content-item-selected,.ivu-transfer-list-content-item-selected:hover{color:#2d8cf0}.ivu-transfer-list-content-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-transfer-list-content-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-transfer-large .ivu-transfer-list-content-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-transfer-list-content-item{white-space:normal}}.ivu-table{width:inherit;height:100%;max-width:100%;overflow:hidden;color:#515a6e;font-size:12px;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.ivu-table-wrapper{position:relative;border:1px solid #dcdee2;border-bottom:0;border-right:0;overflow:hidden}.ivu-table-hide{opacity:0}.ivu-table:before{content:'';width:100%;height:1px;position:absolute;left:0;bottom:0;background-color:#dcdee2;z-index:1}.ivu-table:after{content:'';width:1px;height:100%;position:absolute;top:0;right:0;background-color:#dcdee2;z-index:3}.ivu-table-footer,.ivu-table-title{height:48px;line-height:48px;border-bottom:1px solid #e8eaec}.ivu-table-footer{border-bottom:none}.ivu-table-header{overflow:hidden}.ivu-table-overflowX{overflow-x:scroll}.ivu-table-overflowY{overflow-y:scroll}.ivu-table-tip{overflow-x:auto;overflow-y:hidden}.ivu-table-with-fixed-top.ivu-table-with-footer .ivu-table-footer{border-top:1px solid #dcdee2}.ivu-table-with-fixed-top.ivu-table-with-footer tbody tr:last-child td{border-bottom:none}.ivu-table td,.ivu-table th{min-width:0;height:48px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;text-overflow:ellipsis;vertical-align:middle;border-bottom:1px solid #e8eaec}.ivu-table th{height:40px;white-space:nowrap;overflow:hidden;background-color:#f8f8f9}.ivu-table td{background-color:#fff;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}td.ivu-table-column-left,th.ivu-table-column-left{text-align:left}td.ivu-table-column-center,th.ivu-table-column-center{text-align:center}td.ivu-table-column-right,th.ivu-table-column-right{text-align:right}.ivu-table table{table-layout:fixed}.ivu-table-border td,.ivu-table-border th{border-right:1px solid #e8eaec}.ivu-table-cell{padding-left:18px;padding-right:18px;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box}.ivu-table-cell-ellipsis{word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ivu-table-cell-tooltip{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ivu-table-cell-tooltip-content{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-table-cell-with-expand{height:47px;line-height:47px;padding:0;text-align:center}.ivu-table-cell-expand{cursor:pointer;-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}.ivu-table-cell-expand i{font-size:14px}.ivu-table-cell-expand-expanded{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ivu-table-cell-sort{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-table-cell-with-selection .ivu-checkbox-wrapper{margin-right:0}.ivu-table-hidden{visibility:hidden}th .ivu-table-cell{display:inline-block;word-wrap:normal;vertical-align:middle}td.ivu-table-expanded-cell{padding:20px 50px;background:#f8f8f9}.ivu-table-stripe .ivu-table-body tr:nth-child(2n) td,.ivu-table-stripe .ivu-table-fixed-body tr:nth-child(2n) td{background-color:#f8f8f9}.ivu-table-stripe .ivu-table-body tr.ivu-table-row-hover td,.ivu-table-stripe .ivu-table-fixed-body tr.ivu-table-row-hover td{background-color:#ebf7ff}tr.ivu-table-row-hover td{background-color:#ebf7ff}.ivu-table-large{font-size:14px}.ivu-table-large th{height:48px}.ivu-table-large td{height:60px}.ivu-table-large-footer,.ivu-table-large-title{height:60px;line-height:60px}.ivu-table-large .ivu-table-cell-with-expand{height:59px;line-height:59px}.ivu-table-large .ivu-table-cell-with-expand i{font-size:16px}.ivu-table-small th{height:32px}.ivu-table-small td{height:40px}.ivu-table-small-footer,.ivu-table-small-title{height:40px;line-height:40px}.ivu-table-small .ivu-table-cell-with-expand{height:39px;line-height:39px}.ivu-table-row-highlight td,.ivu-table-stripe .ivu-table-body tr.ivu-table-row-highlight:nth-child(2n) td,.ivu-table-stripe .ivu-table-fixed-body tr.ivu-table-row-highlight:nth-child(2n) td,tr.ivu-table-row-highlight.ivu-table-row-hover td{background-color:#ebf7ff}.ivu-table-fixed,.ivu-table-fixed-right{position:absolute;top:0;left:0;-webkit-box-shadow:2px 0 6px -2px rgba(0,0,0,.2);box-shadow:2px 0 6px -2px rgba(0,0,0,.2)}.ivu-table-fixed-right::before,.ivu-table-fixed::before{content:'';width:100%;height:1px;background-color:#dcdee2;position:absolute;left:0;bottom:0;z-index:4}.ivu-table-fixed-right{top:0;left:auto;right:0;-webkit-box-shadow:-2px 0 6px -2px rgba(0,0,0,.2);box-shadow:-2px 0 6px -2px rgba(0,0,0,.2)}.ivu-table-fixed-right-header{position:absolute;top:-1px;right:0;background-color:#f8f8f9;border-top:1px solid #dcdee2;border-bottom:1px solid #e8eaec}.ivu-table-fixed-header{overflow:hidden}.ivu-table-fixed-body{overflow:hidden;position:relative;z-index:3}.ivu-table-fixed-shadow{width:1px;height:100%;position:absolute;top:0;right:0;-webkit-box-shadow:1px 0 6px rgba(0,0,0,.2);box-shadow:1px 0 6px rgba(0,0,0,.2);overflow:hidden;z-index:1}.ivu-table-sort{display:inline-block;width:14px;height:12px;margin-top:-1px;vertical-align:middle;overflow:hidden;cursor:pointer;position:relative}.ivu-table-sort i{display:block;height:6px;line-height:6px;overflow:hidden;position:absolute;color:#c5c8ce;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out;font-size:16px}.ivu-table-sort i:hover{color:inherit}.ivu-table-sort i.on{color:#2d8cf0}.ivu-table-sort i:first-child{top:0}.ivu-table-sort i:last-child{bottom:0}.ivu-table-filter{display:inline-block;cursor:pointer;position:relative}.ivu-table-filter i{color:#c5c8ce;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-table-filter i:hover{color:inherit}.ivu-table-filter i.on{color:#2d8cf0}.ivu-table-filter-list{padding:8px 0 0}.ivu-table-filter-list-item{padding:0 12px 8px}.ivu-table-filter-list-item .ivu-checkbox-wrapper+.ivu-checkbox-wrapper{margin:0}.ivu-table-filter-list-item label{display:block}.ivu-table-filter-list-item label>span{margin-right:4px}.ivu-table-filter-list ul{padding-bottom:8px}.ivu-table-filter-list .ivu-table-filter-select-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-table-filter-list .ivu-table-filter-select-item:hover{background:#f3f3f3}.ivu-table-filter-list .ivu-table-filter-select-item-focus{background:#f3f3f3}.ivu-table-filter-list .ivu-table-filter-select-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-table-filter-list .ivu-table-filter-select-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-table-filter-list .ivu-table-filter-select-item-selected,.ivu-table-filter-list .ivu-table-filter-select-item-selected:hover{color:#2d8cf0}.ivu-table-filter-list .ivu-table-filter-select-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-table-filter-list .ivu-table-filter-select-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-table-filter-list .ivu-table-large .ivu-table-filter-select-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-table-filter-list .ivu-table-filter-select-item{white-space:normal}}.ivu-table-filter-footer{padding:4px;border-top:1px solid #e8eaec;overflow:hidden}.ivu-table-filter-footer button:first-child{float:left}.ivu-table-filter-footer button:last-child{float:right}.ivu-table-tip table{width:100%}.ivu-table-tip table td{text-align:center}.ivu-table-expanded-hidden{visibility:hidden}.ivu-table-popper{min-width:0;text-align:left}.ivu-table-popper .ivu-poptip-body{padding:0}.ivu-dropdown{display:inline-block}.ivu-dropdown .ivu-select-dropdown{overflow:visible;max-height:none}.ivu-dropdown .ivu-dropdown{width:100%}.ivu-dropdown-rel{position:relative}.ivu-dropdown-rel-user-select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-dropdown-menu{min-width:100px}.ivu-dropdown-transfer{width:auto}.ivu-dropdown-item-selected,.ivu-dropdown-item.ivu-dropdown-item-selected:hover{background:#f0faff}.ivu-dropdown-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-dropdown-item:hover{background:#f3f3f3}.ivu-dropdown-item-focus{background:#f3f3f3}.ivu-dropdown-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-dropdown-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-dropdown-item-selected,.ivu-dropdown-item-selected:hover{color:#2d8cf0}.ivu-dropdown-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-dropdown-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-dropdown-large .ivu-dropdown-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-dropdown-item{white-space:normal}}.ivu-tabs{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;overflow:hidden;color:#515a6e;zoom:1}.ivu-tabs:after,.ivu-tabs:before{content:"";display:table}.ivu-tabs:after{clear:both;visibility:hidden;font-size:0;height:0}.ivu-tabs-bar{outline:0}.ivu-tabs-ink-bar{height:2px;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#2d8cf0;position:absolute;left:0;bottom:1px;z-index:1;-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;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.ivu-tabs-bar{border-bottom:1px solid #dcdee2;margin-bottom:16px}.ivu-tabs-nav-container{margin-bottom:-1px;line-height:1.5;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;overflow:hidden;position:relative;zoom:1}.ivu-tabs-nav-container:after,.ivu-tabs-nav-container:before{content:"";display:table}.ivu-tabs-nav-container:after{clear:both;visibility:hidden;font-size:0;height:0}.ivu-tabs-nav-container:focus{outline:0}.ivu-tabs-nav-container:focus .ivu-tabs-tab-focused{border-color:#57a3f3!important}.ivu-tabs-nav-container-scrolling{padding-left:32px;padding-right:32px}.ivu-tabs-nav-wrap{overflow:hidden;margin-bottom:-1px}.ivu-tabs-nav-scroll{overflow:hidden;white-space:nowrap}.ivu-tabs-nav-right{float:right;margin-left:5px}.ivu-tabs-nav-prev{position:absolute;line-height:32px;cursor:pointer;left:0}.ivu-tabs-nav-next{position:absolute;line-height:32px;cursor:pointer;right:0}.ivu-tabs-nav-scrollable{padding:0 12px}.ivu-tabs-nav-scroll-disabled{display:none}.ivu-tabs-nav{padding-left:0;margin:0;float:left;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-webkit-transition:-webkit-transform .5s ease-in-out;transition:-webkit-transform .5s ease-in-out;transition:transform .5s ease-in-out;transition:transform .5s ease-in-out,-webkit-transform .5s ease-in-out}.ivu-tabs-nav:after,.ivu-tabs-nav:before{display:table;content:" "}.ivu-tabs-nav:after{clear:both}.ivu-tabs-nav .ivu-tabs-tab-disabled{pointer-events:none;cursor:default;color:#ccc}.ivu-tabs-nav .ivu-tabs-tab{display:inline-block;height:100%;padding:8px 16px;margin-right:16px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;text-decoration:none;position:relative;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out}.ivu-tabs-nav .ivu-tabs-tab:hover{color:#57a3f3}.ivu-tabs-nav .ivu-tabs-tab:active{color:#2b85e4}.ivu-tabs-nav .ivu-tabs-tab .ivu-icon{width:14px;height:14px;margin-right:8px}.ivu-tabs-nav .ivu-tabs-tab-active{color:#2d8cf0}.ivu-tabs-mini .ivu-tabs-nav-container{font-size:14px}.ivu-tabs-mini .ivu-tabs-tab{margin-right:0;padding:8px 16px;font-size:12px}.ivu-tabs .ivu-tabs-content-animated{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;will-change:transform;-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}.ivu-tabs .ivu-tabs-tabpane{-ms-flex-negative:0;flex-shrink:0;width:100%;-webkit-transition:opacity .3s;transition:opacity .3s;opacity:1;outline:0}.ivu-tabs .ivu-tabs-tabpane-inactive{opacity:0;height:0}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-nav-container{height:32px}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-ink-bar{visibility:hidden}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab{margin:0;margin-right:4px;height:31px;padding:5px 16px 4px;border:1px solid #dcdee2;border-bottom:0;border-radius:4px 4px 0 0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;background:#f8f8f9}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab-active{height:32px;padding-bottom:5px;background:#fff;-webkit-transform:translateZ(0);transform:translateZ(0);border-color:#dcdee2;color:#2d8cf0}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-nav-wrap{margin-bottom:0}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab .ivu-tabs-close{width:0;height:22px;font-size:22px;margin-right:0;color:#999;text-align:right;vertical-align:middle;overflow:hidden;position:relative;top:-1px;-webkit-transform-origin:100% 50%;-ms-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab .ivu-tabs-close:hover{color:#444}.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab-active .ivu-tabs-close,.ivu-tabs.ivu-tabs-card>.ivu-tabs-bar .ivu-tabs-tab:hover .ivu-tabs-close{width:22px;-webkit-transform:translateZ(0);transform:translateZ(0);margin-right:-6px}.ivu-tabs-no-animation>.ivu-tabs-content{-webkit-transform:none!important;-ms-transform:none!important;transform:none!important}.ivu-tabs-no-animation>.ivu-tabs-content>.ivu-tabs-tabpane-inactive{display:none}.ivu-menu{display:block;margin:0;padding:0;outline:0;list-style:none;color:#515a6e;font-size:14px;position:relative;z-index:900}.ivu-menu-horizontal{height:60px;line-height:60px}.ivu-menu-horizontal.ivu-menu-light:after{content:'';display:block;width:100%;height:1px;background:#dcdee2;position:absolute;bottom:0;left:0}.ivu-menu-vertical.ivu-menu-light:after{content:'';display:block;width:1px;height:100%;background:#dcdee2;position:absolute;top:0;bottom:0;right:0;z-index:1}.ivu-menu-light{background:#fff}.ivu-menu-dark{background:#515a6e}.ivu-menu-primary{background:#2d8cf0}.ivu-menu-item{display:block;outline:0;list-style:none;font-size:14px;position:relative;z-index:1;cursor:pointer;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.ivu-menu-item{color:inherit}a.ivu-menu-item:active,a.ivu-menu-item:hover{color:inherit}.ivu-menu-item>i{margin-right:6px}.ivu-menu-submenu-title span>i,.ivu-menu-submenu-title>i{margin-right:8px}.ivu-menu-horizontal .ivu-menu-item,.ivu-menu-horizontal .ivu-menu-submenu{float:left;padding:0 20px;position:relative;cursor:pointer;z-index:3;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-menu-light.ivu-menu-horizontal .ivu-menu-item,.ivu-menu-light.ivu-menu-horizontal .ivu-menu-submenu{height:inherit;line-height:inherit;border-bottom:2px solid transparent;color:#515a6e}.ivu-menu-light.ivu-menu-horizontal .ivu-menu-item-active,.ivu-menu-light.ivu-menu-horizontal .ivu-menu-item:hover,.ivu-menu-light.ivu-menu-horizontal .ivu-menu-submenu-active,.ivu-menu-light.ivu-menu-horizontal .ivu-menu-submenu:hover{color:#2d8cf0;border-bottom:2px solid #2d8cf0}.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-item,.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-submenu{color:rgba(255,255,255,.7)}.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-item-active,.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-item:hover,.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-submenu-active,.ivu-menu-dark.ivu-menu-horizontal .ivu-menu-submenu:hover{color:#fff}.ivu-menu-primary.ivu-menu-horizontal .ivu-menu-item,.ivu-menu-primary.ivu-menu-horizontal .ivu-menu-submenu{color:#fff}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown{min-width:100%;width:auto;max-height:none}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item{height:auto;line-height:normal;border-bottom:0;float:none}.ivu-menu-item-group{line-height:normal}.ivu-menu-item-group-title{height:30px;line-height:30px;padding-left:8px;font-size:12px;color:#999}.ivu-menu-item-group>ul{padding:0!important;list-style:none!important}.ivu-menu-vertical .ivu-menu-item,.ivu-menu-vertical .ivu-menu-submenu-title{padding:14px 24px;position:relative;cursor:pointer;z-index:1;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-menu-vertical .ivu-menu-item:hover,.ivu-menu-vertical .ivu-menu-submenu-title:hover{color:#2d8cf0}.ivu-menu-vertical .ivu-menu-submenu-title-icon{position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ivu-menu-submenu-title-icon{-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}.ivu-menu-horizontal .ivu-menu-opened>*>.ivu-menu-submenu-title-icon{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.ivu-menu-vertical .ivu-menu-opened>*>.ivu-menu-submenu-title-icon{-webkit-transform:translateY(-50%) rotate(180deg);-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg)}.ivu-menu-vertical .ivu-menu-submenu-nested{padding-left:20px}.ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item{padding-left:43px}.ivu-menu-vertical .ivu-menu-item-group-title{height:48px;line-height:48px;font-size:14px;padding-left:28px}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-group-title{color:rgba(255,255,255,.36)}.ivu-menu-light.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu){color:#2d8cf0;background:#f0faff;z-index:2}.ivu-menu-light.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu):after{content:'';display:block;width:2px;position:absolute;top:0;bottom:0;right:0;background:#2d8cf0}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item,.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title{color:rgba(255,255,255,.7)}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu),.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu):hover,.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title-active:not(.ivu-menu-submenu),.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title-active:not(.ivu-menu-submenu):hover{background:#363e4f}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item:hover,.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title:hover{color:#fff;background:#515a6e}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu),.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title-active:not(.ivu-menu-submenu){color:#2d8cf0}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item:hover{color:#fff;background:0 0!important}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item-active,.ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item-active:hover{border-right:none;color:#fff;background:#2d8cf0!important}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-child-item-active>.ivu-menu-submenu-title{color:#fff}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-opened{background:#363e4f}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-opened .ivu-menu-submenu-title{background:#515a6e}.ivu-menu-dark.ivu-menu-vertical .ivu-menu-opened .ivu-menu-submenu-has-parent-submenu .ivu-menu-submenu-title{background:0 0}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item:hover{background:#f3f3f3}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-focus{background:#f3f3f3}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-selected,.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-selected:hover{color:#2d8cf0}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-menu-large .ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item{white-space:normal}}.ivu-menu-horizontal .ivu-menu-submenu .ivu-select-dropdown .ivu-menu-item{padding:7px 16px 8px;font-size:14px!important}.ivu-date-picker{display:inline-block;line-height:normal}.ivu-date-picker-rel{position:relative}.ivu-date-picker .ivu-select-dropdown{width:auto;padding:0;overflow:visible;max-height:none}.ivu-date-picker-cells{width:196px;margin:10px;white-space:normal}.ivu-date-picker-cells span{display:inline-block;width:24px;height:24px}.ivu-date-picker-cells span em{display:inline-block;width:24px;height:24px;line-height:24px;margin:2px;font-style:normal;border-radius:3px;text-align:center;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-date-picker-cells-header span{line-height:24px;text-align:center;margin:2px;color:#c5c8ce}.ivu-date-picker-cells-cell:hover em{background:#e1f0fe}.ivu-date-picker-cells-focused em{-webkit-box-shadow:0 0 0 1px #2d8cf0 inset;box-shadow:0 0 0 1px #2d8cf0 inset}span.ivu-date-picker-cells-cell{width:28px;height:28px;cursor:pointer}.ivu-date-picker-cells-cell-next-month em,.ivu-date-picker-cells-cell-prev-month em{color:#c5c8ce}.ivu-date-picker-cells-cell-next-month:hover em,.ivu-date-picker-cells-cell-prev-month:hover em{background:0 0}span.ivu-date-picker-cells-cell-disabled,span.ivu-date-picker-cells-cell-disabled:hover,span.ivu-date-picker-cells-cell-week-label,span.ivu-date-picker-cells-cell-week-label:hover{cursor:not-allowed;color:#c5c8ce}span.ivu-date-picker-cells-cell-disabled em,span.ivu-date-picker-cells-cell-disabled:hover em,span.ivu-date-picker-cells-cell-week-label em,span.ivu-date-picker-cells-cell-week-label:hover em{color:inherit;background:inherit}span.ivu-date-picker-cells-cell-disabled,span.ivu-date-picker-cells-cell-disabled:hover{background:#f7f7f7}.ivu-date-picker-cells-cell-today em{position:relative}.ivu-date-picker-cells-cell-today em:after{content:'';display:block;width:6px;height:6px;border-radius:50%;background:#2d8cf0;position:absolute;top:1px;right:1px}.ivu-date-picker-cells-cell-range{position:relative}.ivu-date-picker-cells-cell-range em{position:relative;z-index:1}.ivu-date-picker-cells-cell-range:before{content:'';display:block;background:#e1f0fe;border-radius:0;border:0;position:absolute;top:2px;bottom:2px;left:0;right:0}.ivu-date-picker-cells-cell-selected em,.ivu-date-picker-cells-cell-selected:hover em{background:#2d8cf0;color:#fff}span.ivu-date-picker-cells-cell-disabled.ivu-date-picker-cells-cell-selected em{background:#c5c8ce;color:#f7f7f7}.ivu-date-picker-cells-cell-today.ivu-date-picker-cells-cell-selected em:after{background:#fff}.ivu-date-picker-cells-show-week-numbers{width:226px}.ivu-date-picker-cells-month,.ivu-date-picker-cells-year{margin-top:14px}.ivu-date-picker-cells-month span,.ivu-date-picker-cells-year span{width:40px;height:28px;line-height:28px;margin:10px 12px;border-radius:3px}.ivu-date-picker-cells-month span em,.ivu-date-picker-cells-year span em{width:40px;height:28px;line-height:28px;margin:0}.ivu-date-picker-cells-month .ivu-date-picker-cells-cell-focused,.ivu-date-picker-cells-year .ivu-date-picker-cells-cell-focused{background-color:#d5e8fc}.ivu-date-picker-header{height:32px;line-height:32px;text-align:center;border-bottom:1px solid #e8eaec}.ivu-date-picker-header-label{cursor:pointer;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-date-picker-header-label:hover{color:#2d8cf0}.ivu-date-picker-btn-pulse{background-color:#d5e8fc!important;border-radius:4px;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.ivu-date-picker-prev-btn{float:left}.ivu-date-picker-prev-btn-arrow-double{margin-left:10px}.ivu-date-picker-prev-btn-arrow-double i:after{content:"\F115";margin-left:-8px}.ivu-date-picker-next-btn{float:right}.ivu-date-picker-next-btn-arrow-double{margin-right:10px}.ivu-date-picker-next-btn-arrow-double i:after{content:"\F11F";margin-left:-8px}.ivu-date-picker-with-range .ivu-picker-panel-body{min-width:432px}.ivu-date-picker-with-range .ivu-picker-panel-content{float:left}.ivu-date-picker-with-range .ivu-picker-cells-show-week-numbers{min-width:492px}.ivu-date-picker-with-week-numbers .ivu-picker-panel-body-date{min-width:492px}.ivu-date-picker-transfer{z-index:1060;max-height:none;width:auto}.ivu-date-picker-focused input{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-picker-panel-icon-btn{display:inline-block;width:20px;height:24px;line-height:26px;margin-top:4px;text-align:center;cursor:pointer;color:#c5c8ce;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-picker-panel-icon-btn:hover{color:#2d8cf0}.ivu-picker-panel-icon-btn i{font-size:14px}.ivu-picker-panel-body-wrapper.ivu-picker-panel-with-sidebar{padding-left:92px}.ivu-picker-panel-sidebar{width:92px;float:left;margin-left:-92px;position:absolute;top:0;bottom:0;background:#f8f8f9;border-right:1px solid #e8eaec;border-radius:4px 0 0 4px;overflow:auto}.ivu-picker-panel-shortcut{padding:6px 15px 6px 15px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-picker-panel-shortcut:hover{background:#e8eaec}.ivu-picker-panel-body{float:left}.ivu-picker-confirm{border-top:1px solid #e8eaec;text-align:right;padding:8px;clear:both}.ivu-picker-confirm>span{color:#2d8cf0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;float:left;padding:2px 0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-picker-confirm>span:hover{color:#57a3f3}.ivu-picker-confirm>span:active{color:#2b85e4}.ivu-picker-confirm-time{float:left}.ivu-time-picker-cells{min-width:112px}.ivu-time-picker-cells-with-seconds{min-width:168px}.ivu-time-picker-cells-list{width:56px;max-height:144px;float:left;overflow:hidden;border-left:1px solid #e8eaec;position:relative}.ivu-time-picker-cells-list:hover{overflow-y:auto}.ivu-time-picker-cells-list:first-child{border-left:none;border-radius:4px 0 0 4px}.ivu-time-picker-cells-list:last-child{border-radius:0 4px 4px 0}.ivu-time-picker-cells-list ul{width:100%;margin:0;padding:0 0 120px 0;list-style:none}.ivu-time-picker-cells-list ul li{width:100%;height:24px;line-height:24px;margin:0;padding:0 0 0 16px;-webkit-box-sizing:content-box;box-sizing:content-box;text-align:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;list-style:none;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-time-picker-cells-cell:hover{background:#f3f3f3}.ivu-time-picker-cells-cell-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-time-picker-cells-cell-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-time-picker-cells-cell-selected,.ivu-time-picker-cells-cell-selected:hover{color:#2d8cf0;background:#f3f3f3}.ivu-time-picker-cells-cell-focused{background-color:#d5e8fc}.ivu-time-picker-header{height:32px;line-height:32px;text-align:center;border-bottom:1px solid #e8eaec}.ivu-time-picker-with-range .ivu-picker-panel-body{min-width:228px}.ivu-time-picker-with-range .ivu-picker-panel-content{float:left;position:relative}.ivu-time-picker-with-range .ivu-picker-panel-content:after{content:'';display:block;width:2px;position:absolute;top:31px;bottom:0;right:-2px;background:#e8eaec;z-index:1}.ivu-time-picker-with-range .ivu-picker-panel-content-right{float:right}.ivu-time-picker-with-range .ivu-picker-panel-content-right:after{right:auto;left:-2px}.ivu-time-picker-with-range .ivu-time-picker-cells-list:first-child{border-radius:0}.ivu-time-picker-with-range .ivu-time-picker-cells-list:last-child{border-radius:0}.ivu-time-picker-with-range.ivu-time-picker-with-seconds .ivu-picker-panel-body{min-width:340px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells{min-width:216px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-with-seconds{min-width:216px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-with-seconds .ivu-time-picker-cells-list{width:72px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-with-seconds .ivu-time-picker-cells-list ul li{padding:0 0 0 28px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-list{width:108px;max-height:216px}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-list:first-child{border-radius:0}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-list:last-child{border-radius:0}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-list ul{padding:0 0 192px 0}.ivu-picker-panel-content .ivu-picker-panel-content .ivu-time-picker-cells-list ul li{padding:0 0 0 46px}.ivu-form .ivu-form-item-label{text-align:right;vertical-align:middle;float:left;font-size:12px;color:#515a6e;line-height:1;padding:10px 12px 10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.ivu-form-label-left .ivu-form-item-label{text-align:left}.ivu-form-label-top .ivu-form-item-label{float:none;display:inline-block;padding:0 0 10px 0}.ivu-form-inline .ivu-form-item{display:inline-block;margin-right:10px;vertical-align:top}.ivu-form-item{margin-bottom:24px;vertical-align:top;zoom:1}.ivu-form-item:after,.ivu-form-item:before{content:"";display:table}.ivu-form-item:after{clear:both;visibility:hidden;font-size:0;height:0}.ivu-form-item-content{position:relative;line-height:32px;font-size:12px}.ivu-form-item .ivu-form-item{margin-bottom:0}.ivu-form-item .ivu-form-item .ivu-form-item-content{margin-left:0!important}.ivu-form-item-error-tip{position:absolute;top:100%;left:0;line-height:1;padding-top:6px;color:#ed4014}.ivu-form-item-required .ivu-form-item-label:before{content:'*';display:inline-block;margin-right:4px;line-height:1;font-family:SimSun;font-size:12px;color:#ed4014}.ivu-carousel{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.ivu-carousel-list,.ivu-carousel-track{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ivu-carousel-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.ivu-carousel-track{position:relative;top:100%;left:0;display:block;overflow:hidden;z-index:1}.ivu-carousel-track.higher{z-index:2;top:0}.ivu-carousel-item{float:left;height:100%;min-height:1px;display:block}.ivu-carousel-arrow{border:none;outline:0;padding:0;margin:0;width:36px;height:36px;border-radius:50%;cursor:pointer;display:none;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:.2s;transition:.2s;background-color:rgba(31,45,61,.11);color:#fff;text-align:center;font-size:1em;font-family:inherit;line-height:inherit}.ivu-carousel-arrow:hover{background-color:rgba(31,45,61,.5)}.ivu-carousel-arrow>*{vertical-align:baseline}.ivu-carousel-arrow.left{left:16px}.ivu-carousel-arrow.right{right:16px}.ivu-carousel-arrow-always{display:inherit}.ivu-carousel-arrow-hover{display:inherit;opacity:0}.ivu-carousel:hover .ivu-carousel-arrow-hover{opacity:1}.ivu-carousel-dots{z-index:10;display:none;position:relative;list-style:none;text-align:center;padding:0;width:100%;height:17px}.ivu-carousel-dots-inside{display:block;position:absolute;bottom:3px}.ivu-carousel-dots-outside{display:block;margin-top:3px}.ivu-carousel-dots li{position:relative;display:inline-block;vertical-align:top;text-align:center;margin:0 2px;padding:7px 0;cursor:pointer}.ivu-carousel-dots li button{border:0;cursor:pointer;background:#8391a5;opacity:.3;display:block;width:16px;height:3px;border-radius:1px;outline:0;font-size:0;color:transparent;-webkit-transition:all .5s;transition:all .5s}.ivu-carousel-dots li button.radius{width:6px;height:6px;border-radius:50%}.ivu-carousel-dots li:hover>button{opacity:.7}.ivu-carousel-dots li.ivu-carousel-active>button{opacity:1;width:24px}.ivu-carousel-dots li.ivu-carousel-active>button.radius{width:6px}.ivu-rate{display:inline-block;margin:0;padding:0;font-size:20px;vertical-align:middle;font-weight:400;font-style:normal}.ivu-rate-disabled .ivu-rate-star-content:before,.ivu-rate-disabled .ivu-rate-star:before{cursor:default}.ivu-rate-disabled .ivu-rate-star:hover{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ivu-rate-star-full,.ivu-rate-star-zero{position:relative}.ivu-rate-star-first{position:absolute;left:0;top:0;width:50%;height:100%;overflow:hidden;opacity:0}.ivu-rate-star-first,.ivu-rate-star-second{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .3s ease;transition:all .3s ease;color:#e9e9e9;cursor:pointer}.ivu-rate-star-chart{display:inline-block;margin:0;padding:0;margin-right:8px;position:relative;font-family:Ionicons;-webkit-transition:all .3s ease;transition:all .3s ease}.ivu-rate-star-chart:hover{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.ivu-rate-star-chart.ivu-rate-star-full .ivu-rate-star-first,.ivu-rate-star-chart.ivu-rate-star-full .ivu-rate-star-second{color:#f5a623}.ivu-rate-star-chart.ivu-rate-star-half .ivu-rate-star-first{opacity:1;color:#f5a623}.ivu-rate-star{display:inline-block;margin:0;padding:0;margin-right:8px;position:relative;font-family:Ionicons;-webkit-transition:all .3s ease;transition:all .3s ease}.ivu-rate-star:hover{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.ivu-rate-star-content:before,.ivu-rate-star:before{color:#e9e9e9;cursor:pointer;content:"\F2BF";-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:block}.ivu-rate-star-content{position:absolute;left:0;top:0;width:50%;height:100%;overflow:hidden}.ivu-rate-star-content:before{color:transparent}.ivu-rate-star-full:before,.ivu-rate-star-half .ivu-rate-star-content:before{color:#f5a623}.ivu-rate-star-full:hover:before,.ivu-rate-star-half:hover .ivu-rate-star-content:before{color:#f7b84f}.ivu-rate-text{margin-left:8px;vertical-align:middle;display:inline-block;font-size:12px}.ivu-upload input[type=file]{display:none}.ivu-upload-list{margin-top:8px}.ivu-upload-list-file{padding:4px;color:#515a6e;border-radius:4px;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out;overflow:hidden;position:relative}.ivu-upload-list-file>span{cursor:pointer;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-upload-list-file>span i{display:inline-block;width:12px;height:12px;color:#515a6e;text-align:center}.ivu-upload-list-file:hover{background:#f3f3f3}.ivu-upload-list-file:hover>span{color:#2d8cf0}.ivu-upload-list-file:hover>span i{color:#515a6e}.ivu-upload-list-file:hover .ivu-upload-list-remove{opacity:1}.ivu-upload-list-remove{opacity:0;font-size:18px;cursor:pointer;float:right;margin-right:4px;color:#999;-webkit-transition:all .2s ease;transition:all .2s ease}.ivu-upload-list-remove:hover{color:#444}.ivu-upload-select{display:inline-block}.ivu-upload-drag{background:#fff;border:1px dashed #dcdee2;border-radius:4px;text-align:center;cursor:pointer;position:relative;overflow:hidden;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.ivu-upload-drag:hover{border:1px dashed #2d8cf0}.ivu-upload-dragOver{border:2px dashed #2d8cf0}.ivu-tree ul{list-style:none;margin:0;padding:0;font-size:12px}.ivu-tree ul.ivu-dropdown-menu{padding:0}.ivu-tree ul li{list-style:none;margin:8px 0;padding:0;white-space:nowrap;outline:0}.ivu-tree ul li.ivu-dropdown-item{margin:0;padding:7px 16px;white-space:nowrap}.ivu-tree li ul{margin:0;padding:0 0 0 18px}.ivu-tree-title{display:inline-block;margin:0;padding:0 4px;border-radius:3px;cursor:pointer;vertical-align:top;color:#515a6e;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.ivu-tree-title:hover{background-color:#eaf4fe}.ivu-tree-title-selected,.ivu-tree-title-selected:hover{background-color:#d5e8fc}.ivu-tree-arrow{cursor:pointer;width:12px;text-align:center;display:inline-block}.ivu-tree-arrow i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;font-size:14px;vertical-align:middle}.ivu-tree-arrow-open i{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ivu-tree-arrow-disabled{cursor:not-allowed}.ivu-tree .ivu-checkbox-wrapper{margin-right:4px;margin-left:4px}.ivu-avatar{display:inline-block;text-align:center;background:#ccc;color:#fff;white-space:nowrap;position:relative;overflow:hidden;vertical-align:middle;width:32px;height:32px;line-height:32px;border-radius:16px}.ivu-avatar-image{background:0 0}.ivu-avatar .ivu-icon{position:relative;top:-1px}.ivu-avatar>*{line-height:32px}.ivu-avatar.ivu-avatar-icon{font-size:18px}.ivu-avatar-large{width:40px;height:40px;line-height:40px;border-radius:20px}.ivu-avatar-large>*{line-height:40px}.ivu-avatar-large.ivu-avatar-icon{font-size:24px}.ivu-avatar-large .ivu-icon{position:relative;top:-2px}.ivu-avatar-small{width:24px;height:24px;line-height:24px;border-radius:12px}.ivu-avatar-small>*{line-height:24px}.ivu-avatar-small.ivu-avatar-icon{font-size:14px}.ivu-avatar-square{border-radius:4px}.ivu-avatar>img{width:100%;height:100%}.ivu-color-picker{display:inline-block}.ivu-color-picker-hide{display:none}.ivu-color-picker-hide-drop{visibility:hidden}.ivu-color-picker-disabled{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.ivu-color-picker-disabled:hover{border-color:#e3e5e8}.ivu-color-picker>div:first-child:hover .ivu-input{border-color:#57a3f3}.ivu-color-picker>div:first-child.ivu-color-picker-disabled:hover .ivu-input{border-color:#e3e5e8}.ivu-color-picker .ivu-select-dropdown{padding:0}.ivu-color-picker-input.ivu-input:focus{-webkit-box-shadow:none;box-shadow:none}.ivu-color-picker-focused{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-rel{line-height:0}.ivu-color-picker-color{width:18px;height:18px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px;position:relative;top:2px}.ivu-color-picker-color div{width:100%;height:100%;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);border-radius:2px}.ivu-color-picker-color-empty{background:#fff;overflow:hidden;text-align:center}.ivu-color-picker-color-empty i{font-size:18px;vertical-align:baseline}.ivu-color-picker-color-focused{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-large .ivu-color-picker-color{width:20px;height:20px;top:1px}.ivu-color-picker-large .ivu-color-picker-color-empty i{font-size:20px}.ivu-color-picker-small .ivu-color-picker-color{width:14px;height:14px;top:3px}.ivu-color-picker-small .ivu-color-picker-color-empty i{font-size:14px}.ivu-color-picker-picker-wrapper{padding:8px 8px 0}.ivu-color-picker-picker-panel{width:240px;margin:0 auto;-webkit-box-sizing:initial;box-sizing:initial;position:relative}.ivu-color-picker-picker-alpha-slider,.ivu-color-picker-picker-hue-slider{height:10px;margin-top:8px;position:relative}.ivu-color-picker-picker-colors{margin-top:8px;overflow:hidden;border-radius:2px;-webkit-transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-color-picker-picker-colors:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-picker-colors-wrapper{display:inline;width:20px;height:20px;float:left;position:relative}.ivu-color-picker-picker-colors-wrapper-color{outline:0;display:block;position:absolute;width:16px;height:16px;margin:2px;cursor:pointer;border-radius:2px;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.ivu-color-picker-picker-colors-wrapper-circle{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);-ms-transform:translate(-2px,-2px);transform:translate(-2px,-2px);position:absolute;top:10px;left:10px;cursor:pointer}.ivu-color-picker-picker .ivu-picker-confirm{margin-top:8px}.ivu-color-picker-saturation-wrapper{width:100%;padding-bottom:75%;position:relative;-webkit-transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-color-picker-saturation-wrapper:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-saturation,.ivu-color-picker-saturation--black,.ivu-color-picker-saturation--white{cursor:pointer;position:absolute;top:0;left:0;right:0;bottom:0}.ivu-color-picker-saturation--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))}.ivu-color-picker-saturation--black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.ivu-color-picker-saturation-pointer{cursor:pointer;position:absolute}.ivu-color-picker-saturation-circle{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);-ms-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.ivu-color-picker-hue{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;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%);-webkit-transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-color-picker-hue:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-hue-container{cursor:pointer;margin:0 2px;position:relative;height:100%}.ivu-color-picker-hue-pointer{z-index:2;position:absolute}.ivu-color-picker-hue-picker{cursor:pointer;margin-top:1px;width:4px;border-radius:1px;height:8px;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;-webkit-transform:translateX(-2px);-ms-transform:translateX(-2px);transform:translateX(-2px)}.ivu-color-picker-alpha{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;-webkit-transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,-webkit-box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out;transition:border .2s ease-in-out,box-shadow .2s ease-in-out,-webkit-box-shadow .2s ease-in-out}.ivu-color-picker-alpha:focus{border-color:#57a3f3;outline:0;-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.ivu-color-picker-alpha-checkboard-wrap{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;border-radius:2px}.ivu-color-picker-alpha-checkerboard{position:absolute;top:0;right:0;bottom:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.ivu-color-picker-alpha-gradient{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px}.ivu-color-picker-alpha-container{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.ivu-color-picker-alpha-pointer{z-index:2;position:absolute}.ivu-color-picker-alpha-picker{cursor:pointer;width:4px;border-radius:1px;height:8px;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;-webkit-transform:translateX(-2px);-ms-transform:translateX(-2px);transform:translateX(-2px)}.ivu-color-picker-confirm{margin-top:8px;position:relative;border-top:1px solid #e8eaec;text-align:right;padding:8px;clear:both}.ivu-color-picker-confirm-color{position:absolute;top:11px;left:8px}.ivu-color-picker-confirm-color-editable{top:8px}.ivu-auto-complete .ivu-select-not-found{display:none}.ivu-auto-complete .ivu-icon-ios-close{display:none}.ivu-auto-complete:hover .ivu-icon-ios-close{display:inline-block}.ivu-auto-complete.ivu-select-dropdown{max-height:none}.ivu-divider{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-size:14px;line-height:1.5;color:#515a6e;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;list-style:none;background:#e8eaec}.ivu-divider,.ivu-divider-vertical{margin:0 8px;display:inline-block;height:.9em;width:1px;vertical-align:middle;position:relative;top:-.06em}.ivu-divider-horizontal{display:block;height:1px;width:100%;min-width:100%;margin:24px 0;clear:both}.ivu-divider-horizontal.ivu-divider-with-text-center,.ivu-divider-horizontal.ivu-divider-with-text-left,.ivu-divider-horizontal.ivu-divider-with-text-right{display:table;white-space:nowrap;text-align:center;background:0 0;font-weight:500;color:#17233d;font-size:16px;margin:16px 0}.ivu-divider-horizontal.ivu-divider-with-text-center:after,.ivu-divider-horizontal.ivu-divider-with-text-center:before,.ivu-divider-horizontal.ivu-divider-with-text-left:after,.ivu-divider-horizontal.ivu-divider-with-text-left:before,.ivu-divider-horizontal.ivu-divider-with-text-right:after,.ivu-divider-horizontal.ivu-divider-with-text-right:before{content:'';display:table-cell;position:relative;top:50%;width:50%;border-top:1px solid #e8eaec;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.ivu-divider-horizontal.ivu-divider-small.ivu-divider-with-text-center,.ivu-divider-horizontal.ivu-divider-small.ivu-divider-with-text-left,.ivu-divider-horizontal.ivu-divider-small.ivu-divider-with-text-right{font-size:14px;margin:8px 0}.ivu-divider-horizontal.ivu-divider-with-text-left .ivu-divider-inner-text,.ivu-divider-horizontal.ivu-divider-with-text-right .ivu-divider-inner-text{display:inline-block;padding:0 10px}.ivu-divider-horizontal.ivu-divider-with-text-left:before{top:50%;width:5%}.ivu-divider-horizontal.ivu-divider-with-text-left:after{top:50%;width:95%}.ivu-divider-horizontal.ivu-divider-with-text-right:before{top:50%;width:95%}.ivu-divider-horizontal.ivu-divider-with-text-right:after{top:50%;width:5%}.ivu-divider-inner-text{display:inline-block;padding:0 24px}.ivu-divider-dashed{background:0 0;border-top:1px dashed #e8eaec}.ivu-divider-horizontal.ivu-divider-with-text-left.ivu-divider-dashed,.ivu-divider-horizontal.ivu-divider-with-text-right.ivu-divider-dashed,.ivu-divider-horizontal.ivu-divider-with-text.ivu-divider-dashed{border-top:0}.ivu-divider-horizontal.ivu-divider-with-text-left.ivu-divider-dashed:after,.ivu-divider-horizontal.ivu-divider-with-text-left.ivu-divider-dashed:before,.ivu-divider-horizontal.ivu-divider-with-text-right.ivu-divider-dashed:after,.ivu-divider-horizontal.ivu-divider-with-text-right.ivu-divider-dashed:before,.ivu-divider-horizontal.ivu-divider-with-text.ivu-divider-dashed:after,.ivu-divider-horizontal.ivu-divider-with-text.ivu-divider-dashed:before{border-style:dashed none none}.ivu-anchor{position:relative;padding-left:2px}.ivu-anchor-wrapper{overflow:auto;padding-left:4px;margin-left:-4px}.ivu-anchor-ink{position:absolute;height:100%;left:0;top:0}.ivu-anchor-ink:before{content:' ';position:relative;width:2px;height:100%;display:block;background-color:#e8eaec;margin:0 auto}.ivu-anchor-ink-ball{display:inline-block;position:absolute;width:8px;height:8px;border-radius:50%;border:2px solid #2d8cf0;background-color:#fff;left:50%;-webkit-transition:top .2s ease-in-out;transition:top .2s ease-in-out;-webkit-transform:translate(-50%,2px);-ms-transform:translate(-50%,2px);transform:translate(-50%,2px)}.ivu-anchor.fixed .ivu-anchor-ink .ivu-anchor-ink-ball{display:none}.ivu-anchor-link{padding:8px 0 8px 16px;line-height:1}.ivu-anchor-link-title{display:block;position:relative;-webkit-transition:all .3s;transition:all .3s;color:#515a6e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:8px}.ivu-anchor-link-title:only-child{margin-bottom:0}.ivu-anchor-link-active>.ivu-anchor-link-title{color:#2d8cf0}.ivu-anchor-link .ivu-anchor-link{padding-top:6px;padding-bottom:6px}.ivu-time-with-hash{cursor:pointer}.ivu-time-with-hash:hover{text-decoration:underline}.ivu-cell{position:relative;overflow:hidden}.ivu-cell-link,.ivu-cell-link:active,.ivu-cell-link:hover{color:inherit}.ivu-cell-icon{display:inline-block;margin-right:4px;font-size:14px;vertical-align:middle}.ivu-cell-icon:empty{display:none}.ivu-cell-main{display:inline-block;vertical-align:middle}.ivu-cell-title{line-height:24px;font-size:14px}.ivu-cell-label{line-height:1.2;font-size:12px;color:#808695}.ivu-cell-selected .ivu-cell-label{color:inherit}.ivu-cell-selected,.ivu-cell.ivu-cell-selected:hover{background:#f0faff}.ivu-cell-footer{display:inline-block;position:absolute;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%;right:16px;color:#515a6e}.ivu-cell-with-link .ivu-cell-footer{right:32px}.ivu-cell-selected .ivu-cell-footer{color:inherit}.ivu-cell-arrow{display:inline-block;position:absolute;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);top:50%;right:16px;font-size:14px}.ivu-cell:focus{background:#f3f3f3;outline:0}.ivu-cell-selected:focus{background:rgba(40,123,211,.91)}.ivu-cell{margin:0;line-height:normal;padding:7px 16px;clear:both;color:#515a6e;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.ivu-cell:hover{background:#f3f3f3}.ivu-cell-focus{background:#f3f3f3}.ivu-cell-disabled{color:#c5c8ce;cursor:not-allowed}.ivu-cell-disabled:hover{color:#c5c8ce;background-color:#fff;cursor:not-allowed}.ivu-cell-selected,.ivu-cell-selected:hover{color:#2d8cf0}.ivu-cell-divided{margin-top:5px;border-top:1px solid #e8eaec}.ivu-cell-divided:before{content:'';height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.ivu-cell-large .ivu-cell{padding:7px 16px 8px;font-size:14px!important}@-moz-document url-prefix(){.ivu-cell{white-space:normal}}.ivu-drawer{width:auto;height:100%;position:fixed;top:0}.ivu-drawer-inner{position:absolute}.ivu-drawer-left{left:0}.ivu-drawer-right{right:0}.ivu-drawer-hidden{display:none!important}.ivu-drawer-wrap{position:fixed;overflow:auto;top:0;right:0;bottom:0;left:0;z-index:1000;-webkit-overflow-scrolling:touch;outline:0}.ivu-drawer-wrap-inner{position:absolute;overflow:hidden}.ivu-drawer-wrap-dragging{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ivu-drawer-wrap *{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.ivu-drawer-mask{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(55,55,55,.6);height:100%;z-index:1000}.ivu-drawer-mask-hidden{display:none}.ivu-drawer-mask-inner{position:absolute}.ivu-drawer-content{width:100%;height:100%;position:absolute;top:0;bottom:0;background-color:#fff;border:0;background-clip:padding-box;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.ivu-drawer-content-no-mask{pointer-events:auto}.ivu-drawer-header{border-bottom:1px solid #e8eaec;padding:14px 16px;line-height:1}.ivu-drawer-header p,.ivu-drawer-header-inner{display:inline-block;width:100%;height:20px;line-height:20px;font-size:14px;color:#17233d;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ivu-drawer-header p i,.ivu-drawer-header p span{vertical-align:middle}.ivu-drawer-close{z-index:1;font-size:12px;position:absolute;right:8px;top:8px;overflow:hidden;cursor:pointer}.ivu-drawer-close .ivu-icon-ios-close{font-size:31px;color:#999;-webkit-transition:color .2s ease;transition:color .2s ease;position:relative;top:1px}.ivu-drawer-close .ivu-icon-ios-close:hover{color:#444}.ivu-drawer-body{width:100%;height:calc(100% - 51px);padding:16px;font-size:12px;line-height:1.5;word-wrap:break-word;position:absolute;overflow:auto}.ivu-drawer-no-header .ivu-drawer-body{height:100%}.ivu-drawer-no-mask{pointer-events:none}.ivu-drawer-no-mask .ivu-drawer-drag{pointer-events:auto}.ivu-drawer-drag{top:0;height:100%;width:0;position:absolute}.ivu-drawer-drag-left{right:0}.ivu-drawer-drag-move-trigger{width:8px;height:100px;line-height:100px;position:absolute;top:50%;background:#f3f3f3;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:4px/6px;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.2);box-shadow:0 0 1px 1px rgba(0,0,0,.2);cursor:col-resize}.ivu-drawer-drag-move-trigger-point{display:inline-block;width:50%;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%)}.ivu-drawer-drag-move-trigger-point i{display:block;border-bottom:1px solid silver;padding-bottom:2px}.ivu-breadcrumb{color:#999;font-size:14px}.ivu-breadcrumb a{color:#515a6e;-webkit-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.ivu-breadcrumb a:hover{color:#57a3f3}.ivu-breadcrumb>span:last-child{font-weight:700;color:#515a6e}.ivu-breadcrumb>span:last-child .ivu-breadcrumb-item-separator{display:none}.ivu-breadcrumb-item-separator{margin:0 8px;color:#dcdee2}.ivu-breadcrumb-item-link>.ivu-icon+span{margin-left:4px}.ivu-list{position:relative}.ivu-list-items{margin:0;padding:0;list-style:none}.ivu-list-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0}.ivu-list-item-content{color:#515a6e}.ivu-list-item-meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;font-size:0}.ivu-list-item-meta-avatar{margin-right:16px}.ivu-list-item-meta-content{-webkit-box-flex:1;-ms-flex:1 0;flex:1 0}.ivu-list-item-meta-title{font-weight:700;margin-bottom:4px;color:#515a6e;font-size:14px;line-height:22px}.ivu-list-item-meta-title>a{color:#515a6e;-webkit-transition:all .2s;transition:all .2s}.ivu-list-item-meta-title>a:hover{color:#2d8cf0}.ivu-list-item-meta-description{color:rgba(0,0,0,.45);font-size:14px;line-height:22px}.ivu-list-item-action{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ivu-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:rgba(0,0,0,.45);font-size:14px;line-height:22px;text-align:center;cursor:pointer}.ivu-list-item-action>li:after{content:'';position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#e8eaec}.ivu-list-item-action>li:first-child{padding-left:0}.ivu-list-item-action>li:last-child:after{display:none}.ivu-list-header{background:0 0}.ivu-list-footer{background:0 0}.ivu-list-footer,.ivu-list-header{padding-top:12px;padding-bottom:12px}.ivu-list-split .ivu-list-item{border-bottom:1px solid #e8eaec}.ivu-list-split .ivu-list-item:last-child{border-bottom:none}.ivu-list-split .ivu-list-header{border-bottom:1px solid #e8eaec}.ivu-list-split .ivu-list-footer{border-top:1px solid #e8eaec}.ivu-list-large .ivu-list-item{padding-top:16px;padding-bottom:16px}.ivu-list-small .ivu-list-item{padding-top:8px;padding-bottom:8px}.ivu-list-vertical .ivu-list-item{-webkit-box-align:initial;-ms-flex-align:initial;align-items:initial}.ivu-list-vertical .ivu-list-item-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1}.ivu-list-vertical .ivu-list-item-extra{margin-left:40px}.ivu-list-vertical .ivu-list-item-meta{margin-bottom:16px}.ivu-list-vertical .ivu-list-item-meta-title{margin-bottom:12px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ivu-list-vertical .ivu-list-item-action{margin-top:16px;margin-left:auto}.ivu-list-vertical .ivu-list-item-action>li{padding:0 16px}.ivu-list-vertical .ivu-list-item-action>li:first-child{padding-left:0}.ivu-list-item-no-flex{display:block}.ivu-list:not(.ivu-list-vertical) .ivu-list-item-no-flex .ivu-list-item-action{float:right}.ivu-list-bordered{border:1px solid #dcdee2;border-radius:6px}.ivu-list-bordered .ivu-list-header{padding-right:24px;padding-left:24px}.ivu-list-bordered .ivu-list-footer{padding-right:24px;padding-left:24px}.ivu-list-bordered .ivu-list-item{padding-right:24px;padding-left:24px;border-bottom:1px solid #e8eaec}.ivu-list-bordered .ivu-list-pagination{margin:16px 24px}.ivu-list-bordered.ivu-list-small .ivu-list-item{padding-right:16px;padding-left:16px}.ivu-list-bordered.ivu-list-small .ivu-list-footer,.ivu-list-bordered.ivu-list-small .ivu-list-header{padding:8px 16px}.ivu-list-bordered.ivu-list-large .ivu-list-footer,.ivu-list-bordered.ivu-list-large .ivu-list-header{padding:16px 24px}@media screen and (max-width:768px){.ivu-list-item-action{margin-left:24px}.ivu-list-vertical .ivu-list-item-extra{margin-left:24px}}@media screen and (max-width:576px){.ivu-list-item{-ms-flex-wrap:wrap;flex-wrap:wrap}.ivu-list-item-action{margin-left:12px}.ivu-list-vertical .ivu-list-item{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.ivu-list-vertical .ivu-list-item-main{min-width:220px}.ivu-list-vertical .ivu-list-item-extra{margin:auto auto 16px}}.ivu-calendar{width:100%;border-collapse:collapse}.ivu-calendar-header{border-top:#e8eaec solid 1px;border-left:#e8eaec solid 1px}.ivu-calendar-header-col{height:48px;line-height:48px;font-weight:700;font-size:14px;border-right:#e8eaec solid 1px;border-bottom:#e8eaec solid 1px}.ivu-calendar-content{border-left:#e8eaec solid 1px}.ivu-calendar-content-col{border-right:#e8eaec solid 1px;border-bottom:#e8eaec solid 1px;padding:12px}.ivu-calendar-content-num{font-size:14px;width:36px;height:36px;display:block;text-align:right;line-height:36px;text-align:center;position:relative;border-radius:50%;cursor:pointer}.ivu-calendar-content-num:hover{background:#e6ebf1}.ivu-calendar-content-num-selected{background:#2d8cf0;color:#fff}.ivu-calendar-content-num-selected:hover{background:#2d8cf0}.ivu-calendar-content-num-selected .ivu-calendar-content-num-current{background:#fff}.ivu-calendar-content-num-current{position:absolute;z-index:1;right:6px;top:5px;width:6px;height:6px;border-radius:100%;display:block;background:#2d8cf0}.ivu-calendar-content-col-disabled .ivu-calendar-content-num{color:#c5c8ce;cursor:not-allowed}.ivu-calendar-content-col-disabled .ivu-calendar-content-num:hover{background:0 0}.ivu-calendar-slot-item{height:90px;overflow-y:scroll}.ivu-calendar-wrapper .ivu-calendar-action{height:80px;line-height:80px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ivu-calendar-wrapper .ivu-calendar-action-arrow{font-size:20px;cursor:pointer;height:20px}.ivu-calendar-wrapper .ivu-calendar-action-title{font-size:18px;display:inline-block;margin:0 10px;cursor:pointer} \ No newline at end of file diff --git a/static/js/echarts.min.js b/static/js/echarts.min.js new file mode 100644 index 00000000..55b5e7f5 --- /dev/null +++ b/static/js/echarts.min.js @@ -0,0 +1,22 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";var e=2311,n=function(){return e++},v="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:function(t){var e={},i=t.match(/Firefox\/([\d.]+)/),n=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(e.firefox=!0,e.version=i[1]);n&&(e.ie=!0,e.version=n[1]);o&&(e.edge=!0,e.version=o[1]);a&&(e.weChat=!0);return{browser:e,os:{},node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!e.ie&&!e.edge,pointerEventsSupported:"onpointerdown"in window&&(e.edge||e.ie&&11<=e.version),domSupported:"undefined"!=typeof document}}(navigator.userAgent);var s={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},l={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},u=Object.prototype.toString,i=Array.prototype,r=i.forEach,h=i.filter,o=i.slice,c=i.map,d=i.reduce,a={};function f(t,e){"createCanvas"===t&&(y=null),a[t]=e}function L(t){if(null==t||"object"!=typeof t)return t;var e=t,i=u.call(t);if("[object Array]"===i){if(!$(t)){e=[];for(var n=0,o=t.length;n>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",o[u]+":0",n[1-l]+":auto",o[1-u]+":auto",""].join("!important;"),t.appendChild(r),i.push(r)}return i}(e,a),a,o);if(r)return r(t,i,n),!0}return!1}function zt(t){return"CANVAS"===t.nodeName.toUpperCase()}var Bt="undefined"!=typeof window&&!!window.addEventListener,Vt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Gt=[];function Ft(t,e,i,n){return i=i||{},n||!v.canvasSupported?Wt(t,e,i):v.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):Wt(t,e,i),i}function Wt(t,e,i){if(v.domSupported&&t.getBoundingClientRect){var n=e.clientX,o=e.clientY;if(zt(t)){var a=t.getBoundingClientRect();return i.zrX=n-a.left,void(i.zrY=o-a.top)}if(Rt(Gt,t,n,o))return i.zrX=Gt[0],void(i.zrY=Gt[1])}i.zrX=i.zrY=0}function Ht(t){return t||window.event}function Zt(t,e,i){if(null!=(e=Ht(e)).zrX)return e;var n=e.type;if(n&&0<=n.indexOf("touch")){var o="touchend"!==n?e.targetTouches[0]:e.changedTouches[0];o&&Ft(t,o,e,i)}else Ft(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&Vt.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function Ut(t,e,i,n){Bt?t.addEventListener(e,i,n):t.attachEvent("on"+e,i)}var Xt=Bt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function Yt(t){return 2===t.which||3===t.which}function jt(){this._track=[]}function qt(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}jt.prototype={constructor:jt,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var o={points:[],touches:[],target:e,event:t},a=0,r=n.length;an.getWidth()||i<0||i>n.getHeight()}te.prototype={constructor:te,setHandlerProxy:function(e){this.proxy&&this.proxy.dispose(),e&&(E(ee,function(t){e.on&&e.on(t,this[t],this)},this),e.handler=this),this.proxy=e},mousemove:function(t){var e=t.zrX,i=t.zrY,n=ne(this,e,i),o=this._hovered,a=o.target;a&&!a.__zr&&(a=(o=this.findHover(o.x,o.y)).target);var r=this._hovered=n?{x:e,y:i}:this.findHover(e,i),s=r.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),a&&s!==a&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(r,"mousemove",t),s&&s!==a&&this.dispatchToElement(r,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,i=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&(i||this.trigger("globalout",{type:"globalout",event:t}))},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var n=(t=t||{}).target;if(!n||!n.silent){for(var o="on"+e,a=function(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:Jt}}(e,t,i);n&&(n[o]&&(a.cancelBubble=n[o].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o={x:t,y:e},a=n.length-1;0<=a;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=ie(n[a],t,e))&&(o.topTarget||(o.topTarget=n[a]),r!==$t)){o.target=n[a];break}}return o},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new jt);var i=this._gestureMgr;"start"===e&&i.clear();var n=i.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&i.clear(),n){var o=n.type;t.gestureEvent=o,this.dispatchToElement({target:n.target},o,n.event)}}},E(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(r){te.prototype[r]=function(t){var e,i,n=t.zrX,o=t.zrY,a=ne(this,n,o);if("mouseup"===r&&a||(i=(e=this.findHover(n,o)).target),"mousedown"===r)this._downEl=i,this._downPoint=[t.zrX,t.zrY],this._upEl=i;else if("mouseup"===r)this._upEl=i;else if("click"===r){if(this._downEl!==this._upEl||!this._downPoint||4=this._maxSize&&0>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,1),Ge(t,e),e):void Re(e,0,0,0,1):7===o.length?0<=(n=parseInt(o.substr(1),16))&&n<=16777215?(Re(e,(16711680&n)>>16,(65280&n)>>8,255&n,1),Ge(t,e),e):void Re(e,0,0,0,1):void 0;var a=o.indexOf("("),r=o.indexOf(")");if(-1!==a&&r+1===o.length){var s=o.substr(0,a),l=o.substr(a+1,r-(a+1)).split(","),u=1;switch(s){case"rgba":if(4!==l.length)return void Re(e,0,0,0,1);u=Ne(l.pop());case"rgb":return 3!==l.length?void Re(e,0,0,0,1):(Re(e,Pe(l[0]),Pe(l[1]),Pe(l[2]),u),Ge(t,e),e);case"hsla":return 4!==l.length?void Re(e,0,0,0,1):(l[3]=Ne(l[3]),We(l,e),Ge(t,e),e);case"hsl":return 3!==l.length?void Re(e,0,0,0,1):(We(l,e),Ge(t,e),e);default:return}}Re(e,0,0,0,1)}}function We(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Ne(t[1]),o=Ne(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return Re(e=e||[],Le(255*Oe(r,a,i+1/3)),Le(255*Oe(r,a,i)),Le(255*Oe(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function He(t,e){var i=Fe(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,255e);i++);i=Math.min(i-1,u-2)}C=e;var n=g[(D=i)+1]-g[i];if(0!=n)if(S=(e-g[i])/n,l)if(I=m[i],M=m[0===i?i:i-1],T=m[u-2=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new Di(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},Di.create=function(t){return new Di(t.x,t.y,t.width,t.height)};var Ci=function(t){for(var e in t=t||{},_i.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};Ci.prototype={constructor:Ci,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i>>1])<0?l=a:s=1+a;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);a(t,e[i+h])<0?l=h:r=h+1}return l}function Ri(p,g){var r,s,m=ki,l=0,v=[];function e(t){var e=r[t],i=s[t],n=r[t+1],o=s[t+1];s[t]=i+o,t===l-3&&(r[t+1]=r[t+2],s[t+1]=s[t+2]),l--;var a=Ei(p[n],p,e,i,0,g);e+=a,0!==(i-=a)&&0!==(o=Oi(p[e+i-1],p,n,o,o-1,g))&&(i<=o?function(t,e,i,n){var o=0;for(o=0;os[t+1])break;e(t)}},this.forceMergeRuns=function(){for(;1>=1;return t+e}(o);do{if((a=Pi(t,i,n,e))=e.maxIterations){t+=e.ellipsis;break}var s=0===r?bn(t,o,e.ascCharWidth,e.cnCharWidth):0f)return{lines:[],width:0,height:0};C.textWidth=pn(C.text,w);var S=x.textWidth,M=null==S||"auto"===S;if("string"==typeof S&&"%"===S.charAt(S.length-1))C.percentWidth=S,u.push(C),S=0;else{if(M){S=C.textWidth;var I=x.textBackgroundColor,T=I&&I.image;T&&sn(T=on(T))&&(S=Math.max(S,T.width*b/T.height))}var A=_?_[1]+_[3]:0;S+=A;var D=null!=d?d-v:null;null!=D&&Dn[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),!(i[t]=e).virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else vi("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n=a.length&&a.push({option:t})}}),a}function Zo(t){var r=Q();Eo(t,function(t,e){var i=t.exist;i&&r.set(i.id,t)}),Eo(t,function(t,e){var i=t.option;Y(!i||null==i.id||!r.get(i.id)||r.get(i.id)===t,"id duplicates: "+(i&&i.id)),i&&null!=i.id&&r.set(i.id,t),t.keyInfo||(t.keyInfo={})}),Eo(t,function(t,e){var i=t.exist,n=t.option,o=t.keyInfo;if(Ro(n)){if(o.name=null!=n.name?n.name+"":i?i.name:Bo+e,i)o.id=i.id;else if(null!=n.id)o.id=n.id+"";else for(var a=0;o.id="\0"+o.name+"\0"+a++,r.get(o.id););r.set(o.id,t)}})}function Uo(t){var e=t.name;return!(!e||!e.indexOf(Bo))}function Xo(t){return Ro(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Yo(e,t){return null!=t.dataIndexInside?t.dataIndexInside:null!=t.dataIndex?O(t.dataIndex)?N(t.dataIndex,function(t){return e.indexOfRawIndex(t)}):e.indexOfRawIndex(t.dataIndex):null!=t.name?O(t.name)?N(t.name,function(t){return e.indexOfName(t)}):e.indexOfName(t.name):void 0}function jo(){var e="__\0ec_inner_"+qo+++"_"+Math.random().toFixed(5);return function(t){return t[e]||(t[e]={})}}var qo=0;function Ko(s,l,u){if(R(l)){var t={};t[l+"Index"]=0,l=t}var e=u&&u.defaultMainType;!e||$o(l,e+"Index")||$o(l,e+"Id")||$o(l,e+"Name")||(l[e+"Index"]=0);var h={};return Eo(l,function(t,e){t=l[e];if("dataIndex"!==e&&"dataIndexInside"!==e){var i=e.match(/^(\w+)(Index|Id|Name)$/)||[],n=i[1],o=(i[2]||"").toLowerCase();if(!(!n||!o||null==t||"index"===o&&"none"===t||u&&u.includeMainTypes&&_(u.includeMainTypes,n)<0)){var a={mainType:n};"index"===o&&"all"===t||(a[o]=t);var r=s.queryComponents(a);h[n+"Models"]=r,h[n+"Model"]=r[0]}}else h[e]=t}),h}function $o(t,e){return t&&t.hasOwnProperty(e)}function Jo(t,e,i){t.setAttribute?t.setAttribute(e,i):t[e]=i}function Qo(t){return"auto"===t?v.domSupported?"html":"richText":t||"html"}function ta(t,i){var n=Q(),o=[];return E(t,function(t){var e=i(t);(n.get(e)||(o.push(e),n.set(e,[]))).push(t)}),{keys:o,buckets:n}}var ea=".",ia="___EC__COMPONENT__CONTAINER___";function na(t){var e={main:"",sub:""};return t&&(t=t.split(ea),e.main=t[0]||"",e.sub=t[1]||""),e}function oa(t){(t.$constructor=t).extend=function(t){function e(){t.$constructor?t.$constructor.apply(this,arguments):i.apply(this,arguments)}var i=this;return k(e.prototype,t),e.extend=this.extend,e.superCall=sa,e.superApply=la,w(e,this),e.superClass=i,e}}var aa=0;function ra(t){var e=["__\0is_clz",aa++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function sa(t,e){var i=U(arguments,2);return this.superClass.prototype[e].apply(t,i)}function la(t,e,i){return this.superClass.prototype[e].apply(t,i)}function ua(i,t){t=t||{};var o={};if(i.registerClass=function(t,e){if(e)if(function(t){Y(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}(e),(e=na(e)).sub){if(e.sub!==ia){(function(t){var e=o[t.main];e&&e[ia]||((e=o[t.main]={})[ia]=!0);return e})(e)[e.sub]=t}}else o[e.main]=t;return t},i.getClass=function(t,e,i){var n=o[t];if(n&&n[ia]&&(n=e?n[e]:null),i&&!n)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return n},i.getClassesByMainType=function(t){t=na(t);var i=[],e=o[t.main];return e&&e[ia]?E(e,function(t,e){e!==ia&&i.push(t)}):i.push(e),i},i.hasClass=function(t){return t=na(t),!!o[t.main]},i.getAllClassMainTypes=function(){var i=[];return E(o,function(t,e){i.push(e)}),i},i.hasSubTypes=function(t){t=na(t);var e=o[t.main];return e&&e[ia]},i.parseClassType=na,t.registerWhenExtend){var n=i.extend;n&&(i.extend=function(t){var e=n.call(this,t);return i.registerClass(e,t.type)})}return i}function ha(s){for(var t=0;tthis._ux||or(e-this._yi)>this._uy||this._len<5;return this.addData(ja.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(ja.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(ja.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(ja.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=er(o)*i+t,this._yi=ir(o)*i+e,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(ja.R,t,e,i,n),this},closePath:function(){this.addData(ja.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;il||or(r-o)>u||c===h-1)&&(t.lineTo(a,r),n=a,o=r);break;case ja.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case ja.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case ja.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=m=yr[n=0]+t&&r<=yr[1]+t?h:0}if(a){l=n;n=cr(o),o=cr(l)}else n=cr(n),o=cr(o);oMath.PI/2&&p<1.5*Math.PI&&(h=-h),c+=h)}}return c}function Sr(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,u=0,h=0;hMath.abs(a[1])?0=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function Rl(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?function(t){return t.replace(/^\s+|\s+$/g,"")}(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function zl(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Bl(t){return t.sort(function(t,e){return t-e}),t}function Vl(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Gl(t){var e=t.toString(),i=e.indexOf("e");if(0h&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/o}var Hl=9007199254740991;function Zl(t){var e=2*Math.PI;return(t%e+e)%e}function Ul(t){return-Ol"'])/g,ou={"&":"&","<":"<",">":">",'"':""","'":"'"};function au(t){return null==t?"":(t+"").replace(nu,function(t,e){return ou[e]})}function ru(t,e){return"{"+t+(null==e?"":e)+"}"}var su=["a","b","c","d","e","f","g"];function lu(t,e,i){O(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:i}}:""}function cu(t,e){return"0000".substr(0,e-(t+="").length)+t}function du(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Yl(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),u=n["get"+o+"Minutes"](),h=n["get"+o+"Seconds"](),c=n["get"+o+"Milliseconds"]();return t=t.replace("MM",cu(r,2)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",cu(s,2)).replace("d",s).replace("hh",cu(l,2)).replace("h",l).replace("mm",cu(u,2)).replace("m",u).replace("ss",cu(h,2)).replace("s",h).replace("SSS",cu(c,3))}function fu(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}var pu=xn;var gu=(Object.freeze||Object)({addCommas:tu,toCamelCase:eu,normalizeCssArray:iu,encodeHTML:au,formatTpl:lu,formatTplSimple:uu,getTooltipMarker:hu,formatTime:du,capitalFirst:fu,truncateText:pu,getTextBoundingRect:function(t){return gn(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,i,n,o,a,r,s){return gn(t,e,i,n,o,s,a,r)}}),mu=E,vu=["left","right","top","bottom","width","height"],yu=[["width","left","right"],["height","top","bottom"]];function xu(h,c,d,f,p){var g=0,m=0;null==f&&(f=1/0),null==p&&(p=1/0);var v=0;c.eachChild(function(t,e){var i,n,o=t.position,a=t.getBoundingRect(),r=c.childAt(e+1),s=r&&r.getBoundingRect();if("horizontal"===h){var l=a.width+(s?-s.x+a.x:0);v=f<(i=g+l)||t.newline?(g=0,i=l,m+=v+d,a.height):Math.max(v,a.height)}else{var u=a.height+(s?-s.y+a.y:0);v=p<(n=m+u)||t.newline?(g+=v+d,m=0,n=u,a.width):Math.max(v,a.width)}t.newline||(o[0]=g,o[1]=m,"horizontal"===h?g=i+d:m=n+d)})}var _u=xu;T(xu,"vertical"),T(xu,"horizontal");function wu(t,e,i){i=iu(i||0);var n=e.width,o=e.height,a=Rl(t.left,n),r=Rl(t.top,o),s=Rl(t.right,n),l=Rl(t.bottom,o),u=Rl(t.width,n),h=Rl(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-a),isNaN(h)&&(h=o-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(n/oe)return t[n];return t[i-1]}(s,i):r;if((l=l||r)&&l.length){var u=l[o];return t&&(a[t]=u),n.colorIdx=(o+1)%l.length,u}}},Ru="original",zu="arrayRows",Bu="objectRows",Vu="keyedColumns",Gu="unknown",Fu="typedArray",Wu="column",Hu="row";function Zu(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===Vu?{}:[]),this.sourceFormat=t.sourceFormat||Gu,this.seriesLayoutBy=t.seriesLayoutBy||Wu,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&Q(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}Zu.seriesDataToSource=function(t){return new Zu({data:t,sourceFormat:V(t)?Fu:Ru,fromDataset:!1})},ra(Zu);var Uu={Must:1,Might:2,Not:3},Xu=jo();function Yu(t){var e=t.option,i=e.data,n=V(i)?Fu:Ru,o=!1,a=e.seriesLayoutBy,r=e.sourceHeader,s=e.dimensions,l=Ju(t);if(l){var u=l.option;i=u.source,n=Xu(l).sourceFormat,o=!0,a=a||u.seriesLayoutBy,null==r&&(r=u.sourceHeader),s=s||u.dimensions}var h=function(t,e,i,n,o){if(!t)return{dimensionsDefine:ju(o)};var a,r;if(e===zu)"auto"===n||null==n?qu(function(t){null!=t&&"-"!==t&&(R(t)?null==r&&(r=1):r=0)},i,t,10):r=n?1:0,o||1!==r||(o=[],qu(function(t,e){o[e]=null!=t?t:""},i,t)),a=o?o.length:i===Hu?t.length:t[0]?t[0].length:null;else if(e===Bu)o=o||function(t){var e,i=0;for(;i":"\n",f="richText"===c,p={},g=0;function i(t){return{renderMode:c,content:au(tu(t)),style:p}}var m=this.getData(),a=m.mapDimension("defaultedTooltip",!0),n=a.length,r=this.getRawValue(o),s=O(r),v=m.getItemVisual(o,"color");z(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var l=(1":"",n=i+u.join(i||", ");return{renderMode:c,content:n,style:p}}(r):i(n?Wh(m,o,a[0]):s?r[0]:r)).content,u=d.seriesIndex+"at"+g,y=hu({color:v,type:"item",renderMode:c,markerId:u});p[u]=v,++g;var x=m.getName(o),_=this.name;Uo(this)||(_=""),_=_?au(_)+(h?": ":e):"";var w="string"==typeof y?y:y.content;return{html:h?w+_+l:_+w+(x?au(x)+": "+l:l),markers:p}},isAnimationEnabled:function(){if(v.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,o=Eu.getColorFromPalette.call(this,t,e,i);return o=o||n.getColorFromPalette(t,e,i)},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});function sc(t){var e=t.name;Uo(t)||(t.name=function(t){var i=t.getRawData(),e=i.mapDimension("seriesName",!0),n=[];return E(e,function(t){var e=i.getDimensionInfo(t);e.displayName&&n.push(e.displayName)}),n.join(" ")}(t)||e)}function lc(t){return t.model.getRawData().count()}function uc(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),hc}function hc(t,e){t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function cc(e,i){E(e.CHANGABLE_METHODS,function(t){e.wrapMethod(t,T(dc,i))})}function dc(t){var e=fc(t);e&&e.setOutputEnd(this.count())}function fc(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var o=n.agentStubMap;o&&(n=o.get(t.uid))}return n}}b(rc,Uh),b(rc,Eu);var pc=function(){this.group=new Ci,this.uid=Nl("viewComponent")};pc.prototype={constructor:pc,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var gc=pc.prototype;gc.updateView=gc.updateLayout=gc.updateVisual=function(t,e,i,n){},oa(pc),ua(pc,{registerWhenExtend:!0});function mc(){var s=jo();return function(t){var e=s(t),i=t.pipelineContext,n=e.large,o=e.progressiveRender,a=e.large=i&&i.large,r=e.progressiveRender=i&&i.progressiveRender;return!!(n^a||o^r)&&"reset"}}var vc=jo(),yc=mc();function xc(){this.group=new Ci,this.uid=Nl("viewChart"),this.renderTask=Xh({plan:Sc,reset:Mc}),this.renderTask.context={view:this}}var _c=xc.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){bc(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){bc(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};function wc(t,e,i){if(t&&(t.trigger(e,i),t.isGroup&&!Qs(t)))for(var n=0,o=t.childCount();nc?i+=p(g("data.partialData"),{displayCnt:c}):i+=g("data.allData");for(var r=[],s=0;si.blockIndex?i.step:null,a=n&&n.modDataCount;return{step:o,modBy:null!=a?Math.ceil(a/o):null,modDataCount:a}}},zc.getPipeline=function(t){return this._pipelineMap.get(t)},zc.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),o=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,a=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:o,modDataCount:r,large:a}},zc.restorePipelines=function(t){var n=this,o=n._pipelineMap=Q();t.eachSeries(function(t){var e=t.getProgressive(),i=t.uid;o.set(i,{id:i,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:e&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(e||700),count:0}),qc(n,t,t.dataTask)})},zc.prepareStageTasks=function(){var i=this._stageTaskMap,n=this.ecInstance.getModel(),o=this.api;E(this._allHandlers,function(t){var e=i.get(t.uid)||i.set(t.uid,[]);t.reset&&function(n,o,t,a,r){var s=t.seriesTaskMap||(t.seriesTaskMap=Q()),e=o.seriesType,i=o.getTargetSeries;o.createOnAllSeries?a.eachRawSeries(l):e?a.eachRawSeriesByType(e,l):i&&i(a,r).each(l);function l(t){var e=t.uid,i=s.get(e)||s.set(e,Xh({plan:Zc,reset:Uc,count:jc}));i.context={model:t,ecModel:a,api:r,useClearVisual:o.isVisual&&!o.isLayout,plan:o.plan,reset:o.reset,scheduler:n},qc(n,t,i)}var u=n._pipelineMap;s.each(function(t,e){u.get(e)||(t.dispose(),s.removeKey(e))})}(this,t,e,n,o),t.overallReset&&function(n,t,e,i,o){var a=e.overallTask=e.overallTask||Xh({reset:Gc});a.context={ecModel:i,api:o,overallReset:t.overallReset,scheduler:n};var r=a.agentStubMap=a.agentStubMap||Q(),s=t.seriesType,l=t.getTargetSeries,u=!0,h=t.modifyOutputEnd;s?i.eachRawSeriesByType(s,c):l?l(i,o).each(c):(u=!1,E(i.getSeries(),c));function c(t){var e=t.uid,i=r.get(e);i||(i=r.set(e,Xh({reset:Fc,onDirty:Hc})),a.dirty()),i.context={model:t,overallProgress:u,modifyOutputEnd:h},i.agent=a,i.__block=u,qc(n,t,i)}var d=n._pipelineMap;r.each(function(t,e){d.get(e)||(t.dispose(),a.dirty(),r.removeKey(e))})}(this,t,e,n,o)},this)},zc.prepareView=function(t,e,i,n){var o=t.renderTask,a=o.context;a.model=e,a.ecModel=i,a.api=n,o.__block=!t.incrementalPrepareRender,qc(this,e,o)},zc.performDataProcessorTasks=function(t,e){Bc(this,this._dataProcessorHandlers,t,e,{block:!0})},zc.performVisualTasks=function(t,e,i){Bc(this,this._visualHandlers,t,e,i)},zc.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},zc.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var Vc=zc.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)};function Gc(t){t.overallReset(t.ecModel,t.api,t.payload)}function Fc(t,e){return t.overallProgress&&Wc}function Wc(){this.agent.dirty(),this.getDownstream().dirty()}function Hc(){this.agent&&this.agent.dirty()}function Zc(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Uc(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Vo(t.reset(t.model,t.ecModel,t.api,t.payload));return 1t.get("hoverLayerThreshold")&&!v.node&&t.eachSeries(function(t){if(!t.preventUsingHoverLayer){var e=i._chartsMap[t.__viewId];e.__alive&&e.group.traverse(function(t){t.useHoverLayer=!0})}})}(n,t),Oc(n._zr.dom,t)}function qd(e,i){Id(of,function(t){t(e,i)})}Rd.resize=function(t){if(!this._disposed){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[Ld]=!0,i&&Vd(this),Bd.update.call(this),this[Ld]=!1,Hd.call(this,n),Zd.call(this,n)}}},Rd.showLoading=function(t,e){if(!this._disposed&&(Ad(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),sf[t])){var i=sf[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},Rd.hideLoading=function(){this._disposed||(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},Rd.makeActionFromEvent=function(t){var e=k({},t);return e.type=tf[t.type],e},Rd.dispatchAction=function(t,e){this._disposed||(Ad(e)||(e={silent:!!e}),Qd[t.type]&&this._model&&(this[Ld]?this._pendingActions.push(t):(Wd.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&v.browser.weChat&&this._throttledZrFlush(),Hd.call(this,e.silent),Zd.call(this,e.silent))))},Rd.appendData=function(t){if(!this._disposed){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0}},Rd.on=Nd("on",!1),Rd.off=Nd("off",!1),Rd.one=Nd("one",!1);var Kd=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];function $d(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function Jd(){this.eventInfo}Rd._initEvents=function(){Id(Kd,function(u){function t(t){var e,i=this.getModel(),n=t.target;if("globalout"===u)e={};else if(n&&null!=n.dataIndex){var o=n.dataModel||i.getSeriesByIndex(n.seriesIndex);e=o&&o.getDataParams(n.dataIndex,n.dataType,n)||{}}else n&&n.eventData&&(e=k({},n.eventData));if(e){var a=e.componentType,r=e.componentIndex;"markLine"!==a&&"markPoint"!==a&&"markArea"!==a||(a="series",r=e.seriesIndex);var s=a&&null!=r&&i.getComponent(a,r),l=s&&this["series"===s.mainType?"_chartsMap":"_componentsMap"][s.__viewId];e.event=t,e.type=u,this._ecEventProcessor.eventInfo={targetEl:n,packedEvent:e,model:s,view:l},this.trigger(u,e)}}t.zrEventfulCallAtLast=!0,this._zr.on(u,t,this)},this),Id(tf,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},Rd.isDisposed=function(){return this._disposed},Rd.clear=function(){this._disposed||this.setOption({series:[]},!0)},Rd.dispose=function(){if(!this._disposed){this._disposed=!0,Jo(this.getDom(),df,"");var e=this._api,i=this._model;Id(this._componentsViews,function(t){t.dispose(i,e)}),Id(this._chartsViews,function(t){t.dispose(i,e)}),this._zr.dispose(),delete lf[this.id]}},b(Ed,Ct),Jd.prototype={constructor:Jd,normalizeQuery:function(t){var s={},l={},u={};if(R(t)){var e=Dd(t);s.mainType=e.main||null,s.subType=e.sub||null}else{var h=["Index","Name","Id"],c={name:1,dataIndex:1,dataType:1};E(t,function(t,e){for(var i=!1,n=0;nx[1]&&(x[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},qf(this)},Yf._initDataFromProvider=function(t,e){if(!(e<=t)){for(var i,n=this._chunkSize,o=this._rawData,a=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!o.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=i){var T=r[i],A=a[T][y];if(A){I=A[x];var D=l[T].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var C=null==m?null:m.id;null==C&&null!=I&&(d[I]=d[I]||0,0=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,i=e[t];if(null!=i&&it))return a;o=a-1}}return-1},Yf.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var o=1/0,a=-1,r=0,s=0,l=this.count();st[I][1])&&(M=!1)}M&&(a[r++]=this.getRawIndex(m))}return rw[1]&&(w[1]=_)}}}return o},Yf.downSample=function(t,e,i,n){for(var o=ep(this,[t]),a=o._storage,r=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=o._rawExtent[t],d=new(Wf(this))(u),f=0,p=0;pc[1]&&(c[1]=x),d[f++]=_}return o._count=f,o._indices=d,o.getRawIndex=Jf,o},Yf.getItemModel=function(t){var e=this.hostModel;return new Cl(this.getRawDataItem(t),e,e&&e.ecModel)},Yf.diff=function(e){var i=this;return new Lf(e?e.getIndices():[],this.getIndices(),function(t){return Qf(e,t)},function(t){return Qf(i,t)})},Yf.getVisual=function(t){var e=this._visual;return e&&e[t]},Yf.setVisual=function(t,e){if(Rf(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},Yf.setLayout=function(t,e){if(Rf(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},Yf.getLayout=function(t){return this._layout[t]},Yf.getItemLayout=function(t){return this._itemLayouts[t]},Yf.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?k(this._itemLayouts[t]||{},e):e},Yf.clearItemLayouts=function(){this._itemLayouts.length=0},Yf.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},Yf.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},o=this.hasItemVisual;if(this._itemVisuals[t]=n,Rf(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],o[a]=!0);else n[e]=i,o[e]=!0},Yf.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};function op(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType}function ap(t,e,i){Zu.isInstance(e)||(e=Zu.seriesDataToSource(e)),i=i||{},t=(t||[]).slice();for(var n=(i.dimsDef||[]).slice(),o=Q(),a=Q(),l=[],r=function(t,e,i,n){var o=Math.max(t.dimensionsDetectCount||1,e.length,i.length,n||0);return E(e,function(t){var e=t.dimsDef;e&&(o=Math.max(o,e.length))}),o}(e,t,n,i.dimCount),s=0;s=e[0]&&t<=e[1]},gp.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},gp.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},gp.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},gp.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},gp.prototype.getExtent=function(){return this._extent.slice()},gp.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},gp.prototype.isBlank=function(){return this._isBlank},gp.prototype.setBlank=function(t){this._isBlank=t},gp.prototype.getLabel=null,oa(gp),ua(gp,{registerWhenExtend:!0}),mp.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&N(i,xp);return new mp({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var vp=mp.prototype;function yp(t){return t._map||(t._map=Q(t.categories))}function xp(t){return z(t)&&null!=t.value?t.value:t+""}vp.getOrdinal=function(t){return yp(this).get(t)},vp.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=yp(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var _p=gp.prototype,wp=gp.extend({type:"ordinal",init:function(t,e){t&&!O(t)||(t=new mp({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),_p.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return _p.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(_p.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:et,niceExtent:et});wp.create=function(){return new wp};var bp=zl;function Sp(t){return Gl(t)+2}function Mp(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function Ip(t,e){isFinite(t[0])||(t[0]=e[0]),isFinite(t[1])||(t[1]=e[1]),Mp(t,0,e),Mp(t,1,e),t[0]>t[1]&&(t[0]=t[1])}var Tp=zl,Ap=gp.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),Ap.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Sp(t)},getTicks:function(t){var e=this._interval,i=this._extent,n=this._niceExtent,o=this._intervalPrecision,a=[];if(!e)return a;i[0]s&&(t?a.push(Tp(s+e,o)):a.push(i[1])),a},getMinorTicks:function(t){for(var e=this.getTicks(!0),i=[],n=this.getExtent(),o=1;on[0]&&h>>1;t[o][1]>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}Tg.prototype={constructor:Tg,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;ss[1];d(e[0].coord,s[0])&&(n?e[0].coord=s[0]:e.shift());n&&d(s[0],e[0].coord)&&e.unshift({coord:s[0]});d(s[1],a.coord)&&(n?a.coord=s[1]:e.pop());n&&d(a.coord,s[1])&&e.push({coord:s[1]});function d(t,e){return t=zl(t),e=zl(e),c?en[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}var ym=Ar.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:Xr(Ar.prototype.brush),buildPath:function(t,e){var i=e.points,n=0,o=i.length,a=vm(i,e.smoothConstraint);if(e.connectNulls){for(;0n)return!1;return!0}(a,e))){var r=e.mapDimension(a.dim),s={};return E(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}function Am(t,e,i){if("cartesian2d"!==t.type)return wm(t,e,i);var n=t.getBaseAxis().isHorizontal(),o=_m(t,e,i);if(!i.get("clip",!0)){var a=o.shape,r=Math.max(a.width,a.height);n?(a.y-=r,a.height+=2*r):(a.x-=r,a.width+=2*r)}return o}xc.extend({type:"line",init:function(){var t=new Ci,e=new em;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var n=t.coordinateSystem,o=this.group,a=t.getData(),r=t.getModel("lineStyle"),s=t.getModel("areaStyle"),l=a.mapArray(a.getItemLayout),u="polar"===n.type,h=this._coordSys,c=this._symbolDraw,d=this._polyline,f=this._polygon,p=this._lineGroup,g=t.get("animation"),m=!s.isEmpty(),v=s.get("origin"),y=function(t,e,i){if(!i.valueDim)return[];for(var n=[],o=0,a=e.count();oh[c-1].coord&&(h.reverse(),d.reverse());var f=h[0].coord-10,p=h[c-1].coord+10,g=p-f;if(g<.001)return"transparent";E(h,function(t){t.offset=(t.coord-f)/g}),h.push({offset:c?h[c-1].offset:.5,color:d[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:d[0]||"transparent"});var m=new gs(0,0,0,0,h,!0);return m[n]=f,m[n+"2"]=p,m}}}(a,n)||a.getVisual("color");d.useStyle(D(r.getLineStyle(),{fill:"none",stroke:M,lineJoin:"bevel"}));var I=t.get("smooth");if(I=Mm(t.get("smooth")),d.setShape({smooth:I,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),f){var T=a.getCalculationInfo("stackedOnSeries"),A=0;f.useStyle(D(s.getAreaStyle(),{fill:M,opacity:.7,lineJoin:"bevel"})),T&&(A=Mm(T.get("smooth"))),f.setShape({smooth:I,stackedOnSmooth:A,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=a,this._coordSys=n,this._stackedOnPoints=y,this._points=l,this._step=S,this._valueOrigin=v},dispose:function(){},highlight:function(t,e,i,n){var o=t.getData(),a=Yo(o,n);if(!(a instanceof Array)&&null!=a&&0<=a){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;(r=new Ug(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else xc.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=Yo(o,n);if(null!=a&&0<=a){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else xc.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new ym({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new xm({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i},_updateAnimation:function(t,e,i,n,o,a){var r=this._polyline,s=this._polygon,l=t.hostModel,u=function(t,e,i,n,o,a,r,s){for(var l=function(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=rm(o,e,r),v=rm(a,t,s),y=0;ye&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},w(Em,Vg);var Rm={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},zm={};zm.categoryAxis=m({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},Rm),zm.valueAxis=m({boundaryGap:[0,0],splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#eee",width:1}}},Rm),zm.timeAxis=D({scale:!0,min:"dataMin",max:"dataMax"},zm.valueAxis),zm.logAxis=D({scale:!0,logBase:10},zm.valueAxis);function Bm(a,t,r,e){E(Vm,function(o){t.extend({type:a+"Axis."+o,mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?Mu(t):{};m(t,e.getTheme().get(o+"Axis")),m(t,this.getDefaultOption()),t.type=r(a,t),i&&Su(t,n,i)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=mp.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:p([{},zm[o+"Axis"],e],!0)})}),Lu.registerSubTypeDefaulter(a+"Axis",T(r,a))}var Vm=["value","category","time","log"],Gm=Lu.extend({type:"cartesian2dAxis",axis:null,init:function(){Gm.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){Gm.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){Gm.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function Fm(t,e){return e.type||(e.data?"category":"value")}m(Gm.prototype,cg);var Wm={offset:0};function Hm(t,e){return t.getCoordSysModel()===e}function Zm(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}Bm("x",Gm,Fm,Wm),Bm("y",Gm,Fm,Wm),Lu.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var Um=Zm.prototype;function Xm(t,e,i,n){i.getAxesOnZeroOf=function(){return o?[o]:[]};var o,a=t[e],r=i.model,s=r.get("axisLine.onZero"),l=r.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)Ym(a[l])&&(o=a[l]);else for(var u in a)if(a.hasOwnProperty(u)&&Ym(a[u])&&!n[h(a[u])]){o=a[u];break}o&&(n[h(o)]=!0)}function h(t){return t.dim+"_"+t.index}}function Ym(t){return t&&"category"!==t.type&&"time"!==t.type&&function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(0u[1]?-1:1,c=["start"===a?u[0]-h*l:"end"===a?u[1]+h*l:(u[0]+u[1])/2,av(a)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*Jm/180),av(a)?n=ev(t.rotation,null!=d?d:t.rotation,r):(n=function(t,e,i,n){var o,a,r=Zl(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;o=Ul(r-Jm/2)?(a=l?"bottom":"top","center"):Ul(r-1.5*Jm)?(a=l?"top":"bottom","center"):(a="middle",r<1.5*Jm&&Jm/2l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r=i.r0}}});var ey=Math.PI/180;function iy(o,t,e,i,n,a,r,s,l,u){function h(t,e,i){for(var n=t;nl+r);n++)if(o[n].y+=i,to[n].y+o[n].height)return void c(n,i/2);c(e-1,i/2)}function c(t,e){for(var i=t;0<=i&&!(o[i].y-eo[i-1].y+o[i-1].height));i--);}function d(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=e?v.push(o[y]):m.push(o[y]);d(m,!1,t,e,i,n),d(v,!0,t,e,i,n)}function ny(t){return"center"===t.position}function oy(L,k,P,t,N,e){var O,E,R=L.getData(),z=[],B=!1,V=(L.get("minShowLabelAngle")||0)*ey;R.each(function(t){var e=R.getItemLayout(t),i=R.getItemModel(t),n=i.getModel("label"),o=n.get("position")||i.get("emphasis.label.position"),a=n.get("distanceToLabelLine"),r=n.get("alignTo"),s=Rl(n.get("margin"),P),l=n.get("bleedMargin"),u=n.getFont(),h=i.getModel("labelLine"),c=h.get("length");c=Rl(c,P);var d=h.get("length2");if(d=Rl(d,P),!(e.anglei[0]&&isFinite(h)&&isFinite(i[0]););else{var l=o.getTicks().length-1;c"+N(t,function(t,e){var i=o.get(o.mapDimension(t.dim),n);return au(t.name+" : "+i)}).join("
")},getTooltipPosition:function(t){if(null!=t)for(var e=this.getData(),i=this.coordinateSystem,n=e.getValues(N(i.dimensions,function(t){return e.mapDimension(t)}),t,!0),o=0,a=n.length;o"+au(n+" : "+i)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}}}}),Xv);var Oy="\0_ec_interaction_mutex";function Ey(t,e){return!!Ry(t)[e]}function Ry(t){return t[Oy]||(t[Oy]={})}function zy(i){this.pointerChecker,this._zr=i,this._opt={};var t=A,n=t(By,this),o=t(Vy,this),a=t(Gy,this),r=t(Fy,this),s=t(Wy,this);Ct.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(t,e){this.disable(),this._opt=D(L(e)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(i.on("mousedown",n),i.on("mousemove",o),i.on("mouseup",a)),!0!==t&&"scale"!==t&&"zoom"!==t||(i.on("mousewheel",r),i.on("pinch",s))},this.disable=function(){i.off("mousedown",n),i.off("mousemove",o),i.off("mouseup",a),i.off("mousewheel",r),i.off("pinch",s)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function By(t){if(!(Yt(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function Vy(t){if(this._dragging&&Uy("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!Ey(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,a=e-n,r=i-o;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&Xt(t.event),Zy(this,"pan","moveOnMouseMove",t,{dx:a,dy:r,oldX:n,oldY:o,newX:e,newY:i})}}function Gy(t){Yt(t)||(this._dragging=!1)}function Fy(t){var e=Uy("zoomOnMouseWheel",t,this._opt),i=Uy("moveOnMouseWheel",t,this._opt),n=t.wheelDelta,o=Math.abs(n),a=t.offsetX,r=t.offsetY;if(0!==n&&(e||i)){if(e){var s=3e&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;ea&&(a=t.depth)});var r=t.expandAndCollapse&&0<=t.initialTreeDepth?t.initialTreeDepth:a;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=r}),o.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return au(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}});var Ex=Cs({shape:{parentPoint:[],childPoints:[],orient:"",forkPosition:""},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.childPoints,n=i.length,o=e.parentPoint,a=i[0],r=i[n-1];if(1===n)return t.moveTo(o[0],o[1]),void t.lineTo(a[0],a[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,h=Rl(e.forkPosition,1),c=[];c[l]=o[l],c[u]=o[u]+(r[u]-o[u])*h,t.moveTo(o[0],o[1]),t.lineTo(c[0],c[1]),t.moveTo(a[0],a[1]),c[l]=a[l],t.lineTo(c[0],c[1]),c[l]=r[l],t.lineTo(c[0],c[1]),t.lineTo(r[0],r[1]);for(var d=1;dx.x)||(m-=Math.PI);var b=v?"left":"right",S=a.labelModel.get("rotate"),M=S*(Math.PI/180);g.setStyle({textPosition:a.labelModel.get("position")||b,textRotation:null==S?-m:M,textOrigin:"center",verticalAlign:"middle"})}!function(t,e,i,n,o,a,r,s,l){var u=l.edgeShape,h=n.__edge;if("curve"===u)e.parentNode&&e.parentNode!==i&&cl(h=h||(n.__edge=new ds({shape:Gx(l,o,o),style:D({opacity:0,strokeNoScale:!0},l.lineStyle)})),{shape:Gx(l,a,r),style:{opacity:1}},t);else if("polyline"===u&&"orthogonal"===l.layout&&e!==i&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var c=e.children,d=[],f=0;fh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Fx(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=Lx(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=a/(h.getLayout().x+d+f),p=o/(c.depth-1||1),Fx(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:o-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Fx(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:a-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}(t,e)})}),rc.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],preventUsingHoverLayer:!0,_viewRoot:null,defaultOption:{progressive:0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};!function i(t){var n=0;E(t.children,function(t){i(t);var e=t.value;O(e)&&(e=e[0]),n+=e});var e=t.value;O(e)&&(e=e[0]);null!=e&&!isNaN(e)||(e=n);e<0&&(e=0);O(t.value)?t.value[0]=e:t.value=e}(i);var n=t.levels||[];n=t.levels=function(t,e){var n,i=e.get("color");if(!i)return;if(E(t=t||[],function(t){var e=new Cl(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),!n){(t[0]||(t[0]={})).color=i.slice()}return t}(n,e);var o={};return o.levels=n,Ix.createTree(i,this,o).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=O(i)?tu(i[0]):tu(i);return au(e.getName(t)+": "+n)},getDataParams:function(t){var e=rc.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=Ux(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},k(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=Q(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var Xx=5;function Yx(t){this.group=new Ci,t.add(this.group)}function jx(t,e,i,n,o,a){var r=[[o?t:t-Xx,e],[t+i,e],[t+i,e+n],[o?t:t-Xx,e+n]];return a||r.splice(2,0,[t+i+Xx,e+n/2]),o||r.push([t,e+n/2]),r}Yx.prototype={constructor:Yx,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),bu(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a,r,s=0,l=e.emptyItemWidth,u=t.get("breadcrumb.height"),h=function(t,e,i){var n=e.width,o=e.height,a=Rl(t.x,n),r=Rl(t.y,o),s=Rl(t.x2,n),l=Rl(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=iu(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}(e.pos,e.box),c=e.totalWidth,d=e.renderList,f=d.length-1;0<=f;f--){var p=d[f],g=p.node,m=p.width,v=p.text;c>h.width&&(c-=m-l,m=l,v=null);var y=new Qr({shape:{points:jx(s,0,m,u,f===d.length-1,0===f)},style:D(i.getItemStyle(),{lineJoin:"bevel",text:v,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:T(o,g)});this.group.add(y),a=t,r=g,y.eventData={componentType:"series",componentSubType:"treemap",componentIndex:a.componentIndex,seriesIndex:a.componentIndex,seriesName:a.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:r&&r.dataIndex,name:r&&r.name},treePathInfo:r&&Ux(r,a)},s+=m+8}},remove:function(){this.group.removeAll()}};function qx(t){var e=a_(t);return e.stroke=e.fill=e.lineWidth=null,e}var Kx=A,$x=Ci,Jx=rs,Qx=E,t_=["label"],e_=["emphasis","label"],i_=["upperLabel"],n_=["emphasis","upperLabel"],o_=10,a_=ha([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);function r_(c,r,s,l,u,e,d,t,i,n){if(d){var f=d.getLayout(),o=c.getData();if(o.setItemGraphicEl(d.dataIndex,null),f&&f.isInView){var h=f.width,p=f.height,g=f.borderWidth,m=f.invisible,v=d.getRawIndex(),y=t&&t.getRawIndex(),a=d.viewChildren,x=f.upperHeight,_=a&&a.length,w=d.getModel("itemStyle"),b=d.getModel("emphasis.itemStyle"),S=C("nodeGroup",$x);if(S){if(i.add(S),S.attr("position",[f.x||0,f.y||0]),S.__tmNodeWidth=h,S.__tmNodeHeight=p,f.isAboveViewRoot)return S;var M=d.getModel(),I=C("background",Jx,n,1);if(I&&function(t,e,i){if(e.dataIndex=d.dataIndex,e.seriesIndex=c.seriesIndex,e.setShape({x:0,y:0,width:h,height:p}),m)A(e);else{e.invisible=!1;var n=d.getVisual("borderColor",!0),o=b.get("borderColor"),a=qx(w);a.fill=n;var r=a_(b);if(r.fill=o,i){var s=h-2*g;D(a,r,n,s,x,{x:g,y:0,width:s,height:x})}else a.text=r.text=null;e.setStyle(a),Us(e,r)}t.add(e)}(S,I,_&&f.upperHeight),_)Qs(S)&&Js(S,!1),I&&(Js(I,!0),o.setItemGraphicEl(d.dataIndex,I));else{var T=C("content",Jx,n,2);T&&function(t,e){e.dataIndex=d.dataIndex,e.seriesIndex=c.seriesIndex;var i=Math.max(h-2*g,0),n=Math.max(p-2*g,0);if(e.culling=!0,e.setShape({x:g,y:g,width:i,height:n}),m)A(e);else{e.invisible=!1;var o=d.getVisual("color",!0),a=qx(w);a.fill=o;var r=a_(b);D(a,r,o,i,n),e.setStyle(a),Us(e,r)}t.add(e)}(S,T),I&&Qs(I)&&Js(I,!1),Js(S,!0),o.setItemGraphicEl(d.dataIndex,S)}return S}}}function A(t){t.invisible||e.push(t)}function D(t,e,i,n,o,a){var r=W(c.getFormattedLabel(d.dataIndex,"normal",null,null,a?"upperLabel":"label"),M.get("name"));if(!a&&f.isLeafRoot){var s=c.get("drillDownIcon",!0);r=s?s+" "+r:r}var l=M.getModel(a?i_:t_),u=M.getModel(a?n_:e_),h=l.getShallow("show");el(t,e,l,u,{defaultText:h?r:null,autoColor:i,isRectText:!0}),a&&(t.textRect=L(a)),t.truncate=h&&l.get("ellipsis")?{outerWidth:n,outerHeight:o,minChar:2}:null}function C(t,e,i,n){var o=null!=y&&s[t][y],a=u[t];return o?(s[t][y]=null,function(t,e,i){(t[v]={}).old="nodeGroup"===i?e.position.slice():k({},e.shape)}(a,o,t)):m||((o=new e({z:function(t,e){var i=t*o_+e;return(i-1)/i}(i,n)})).__tmDepth=i,function(t,e,i){var n=t[v]={},o=d.parentNode;if(o&&(!l||"drillDown"===l.direction)){var a=0,r=0,s=u.background[o.getRawIndex()];!l&&s&&s.old&&(a=s.old.width,r=s.old.height),n.old="nodeGroup"===i?[0,r]:{x:a,y:r,width:0,height:0}}n.fadein="nodeGroup"!==i}(a,0,o.__tmStorageName=t)),r[t][v]=o}}Df({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(_(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=Wx(n,["treemapZoomToNode","treemapRootToNode"],t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,l=this._storage,u="treemapRootToNode"===a&&o&&l?{rootNodeGroup:l.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,h=this._giveContainerGroup(r),c=this._doRender(h,t,u);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?c.renderFinally():this._doAnimation(h,c,t,u),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new $x,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){var n=e.getData().tree,o=this._oldTree,a={nodeGroup:[],background:[],content:[]},r={nodeGroup:[],background:[],content:[]},s=this._storage,l=[],c=T(r_,e,r,s,i,a,l);!function a(r,s,l,u,h){u?Qx(s=r,function(t,e){t.isRemoved()||i(e,e)}):new Lf(s,r,t,t).add(i).update(i).remove(T(i,null)).execute();function t(t){return t.getId()}function i(t,e){var i=null!=t?r[t]:null,n=null!=e?s[e]:null,o=c(i,n,l,h);o&&a(i&&i.viewChildren||[],n&&n.viewChildren||[],o,u,h+1)}}(n.root?[n.root]:[],o&&o.root?[o.root]:[],t,n===o||!o,0);var u,h,d=(h={nodeGroup:[],background:[],content:[]},(u=s)&&Qx(u,function(t,e){var i=h[e];Qx(t,function(t){t&&(i.push(t),t.__tmWillDelete=1)})}),h);return this._oldTree=n,this._storage=r,{lastsForAnimation:a,willDeleteEls:d,renderFinally:function(){Qx(d,function(t){Qx(t,function(t){t.parent&&t.parent.remove(t)})}),Qx(l,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,a,e,s){if(e.get("animation")){var l=e.get("animationDurationUpdate"),u=e.get("animationEasing"),h=function(){var a,r=[],s={};return{add:function(t,e,i,n,o){return R(n)&&(o=n,n=0),!s[t.id]&&(s[t.id]=1,r.push({el:t,target:e,time:i,delay:n,easing:o}),!0)},done:function(t){return a=t,this},start:function(){for(var t=r.length,e=0,i=r.length;e=r.length||t===r[t.depth]){var i=O_(l,c,t,e,y,s);n(t,i,o,a,r,s)}})}else p=L_(c),t.setVisual("color",p)}(a,{},N(o.levelModels,function(t){return t?t.get(A_):null}),r,t.getViewRoot().getAncestors(),t)}};function C_(i,n,o,a){var r=k({},n);return E(["color","colorAlpha","colorSaturation"],function(t){var e=i.get(t,!0);null==e&&o&&(e=o[t]),null==e&&(e=n[t]),null==e&&(e=a.get(t)),null!=e&&(r[t]=e)}),r}function L_(t){var e=k_(t,"color");if(e){var i=k_(t,"colorAlpha"),n=k_(t,"colorSaturation");return n&&(e=qe(e,null,null,n)),i&&(e=Ke(e,i)),e}}function k_(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function P_(t,e,i,n,o,a){if(a&&a.length){var r=N_(e,"color")||null!=o.color&&"none"!==o.color&&(N_(e,"colorAlpha")||N_(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new f_(c);return d.__drColorMappingBy=h,d}}}function N_(t,e){var i=t.get(e);return T_(i)&&i.length?{name:e,range:i}:null}function O_(t,e,i,n,o,a){var r=k({},e);if(o){var s=o.type,l="color"===s&&o.__drColorMappingBy,u="index"===l?n:"id"===l?a.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));r[s]=o.mapValueToVisual(u)}return r}var E_=Math.max,R_=Math.min,z_=W,B_=E,V_=["itemStyle","borderWidth"],G_=["itemStyle","gapWidth"],F_=["upperLabel","show"],W_=["upperLabel","height"],H_={seriesType:"treemap",reset:function(t,e,i,n){var o=i.getWidth(),a=i.getHeight(),r=t.option,s=wu(t.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()}),l=r.size||[],u=Rl(z_(s.width,l[0]),o),h=Rl(z_(s.height,l[1]),a),c=n&&n.type,d=Wx(n,["treemapZoomToNode","treemapRootToNode"],t),f="treemapRender"===c||"treemapMove"===c?n.rootRect:null,p=t.getViewRoot(),g=Hx(p);if("treemapMove"!==c){var m="treemapZoomToNode"===c?function(t,e,i,n,o){var a,r=(e||{}).node,s=[n,o];if(!r||r===i)return s;var l=n*o,u=l*t.option.zoomToNodeRatio;for(;a=r.parentNode;){for(var h=0,c=a.children,d=0,f=c.length;ds[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}(e,r,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,i,n,o){if(!n)return i;for(var a=t.get("visibleMin"),r=o.length,s=r,l=r-1;0<=l;l--){var u=o["asc"===n?r-l-1:l].getValue();u/i*ei[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;c "+d)),u++)}var f,p=i.get("coordinateSystem");if("cartesian2d"===p||"polar"===p)f=pp(t,i);else{var g=sh.get(p),m=g&&"view"!==g.type&&g.dimensions||[];_(m,"value")<0&&m.concat(["value"]);var v=sp(t,{coordDimensions:m});(f=new Xf(v,i)).initData(t)}var y=new Xf(["value"],i);return y.initData(l,s),o&&o(f,y),mx({mainData:f,struct:a,structAttr:"graph",datas:{node:f,edge:y},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a}var ew=Af({type:"series.graph",init:function(t){ew.superApply(this,"init",arguments);var e=this;function i(){return e._categoriesData}this.legendVisualProvider=new Yv(i,i),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){ew.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){ew.superApply(this,"mergeDefaultAndTheme",arguments),Go(t,["edgeLabel"],["show"])},getInitialData:function(t,s){var e=t.edges||t.links||[],i=t.data||t.nodes||[],l=this;if(i&&e)return tw(i,e,this,!0,function(t,e){t.wrapMethod("getItemModel",function(t){var e=l._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t});var i=l.getModel("edgeLabel"),n=new Cl({label:i.option},i.parentModel,s),o=l.getModel("emphasis.edgeLabel"),a=new Cl({emphasis:{label:o.option}},o.parentModel,s);function r(t){return(t=this.parsePath(t))&&"label"===t[0]?n:t&&"emphasis"===t[0]&&"label"===t[1]?a:this.parentModel}e.wrapMethod("getItemModel",function(t){return t.customizeGetParent(r),t})}).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"!==i)return ew.superApply(this,"formatTooltip",arguments);var n=this.getData(),o=this.getDataParams(t,i),a=n.graph.getEdgeByIndex(t),r=n.getName(a.node1.dataIndex),s=n.getName(a.node2.dataIndex),l=[];return null!=r&&l.push(r),null!=s&&l.push(s),l=au(l.join(" > ")),o.value&&(l+=" : "+au(o.value)),l},_updateCategoriesData:function(){var t=N(this.option.categories||[],function(t){return null!=t.value?t:k({value:0},t)}),e=new Xf(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return ew.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{label:{show:!0}}}}),iw=ls.prototype,nw=ds.prototype;function ow(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var aw=Cs({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){this[ow(e)?"_buildPathLine":"_buildPathCurve"](t,e)},_buildPathLine:iw.buildPath,_buildPathCurve:nw.buildPath,pointAt:function(t){return this[ow(this.shape)?"_pointAtLine":"_pointAtCurve"](t)},_pointAtLine:iw.pointAt,_pointAtCurve:nw.pointAt,tangentAt:function(t){var e=this.shape,i=ow(e)?[e.x2-e.x1,e.y2-e.y1]:this._tangentAtCurve(t);return mt(i,i)},_tangentAtCurve:nw.tangentAt}),rw=["fromSymbol","toSymbol"];function sw(t){return"_"+t+"Type"}function lw(t,e,i){var n=e.getItemVisual(i,"color"),o=e.getItemVisual(i,t),a=e.getItemVisual(i,t+"Size");if(o&&"none"!==o){O(a)||(a=[a,a]);var r=_g(o,-a[0]/2,-a[1]/2,a[0],a[1],n);return r.name=t,r}}function uw(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.percent=1;var i=e[2];i?(t.cpx1=i[0],t.cpy1=i[1]):(t.cpx1=NaN,t.cpy1=NaN)}function hw(t,e,i){Ci.call(this),this._createLine(t,e,i)}var cw=hw.prototype;function dw(t){this._ctor=t||hw,this.group=new Ci}cw.beforeUpdate=function(){var t=this.childOfName("fromSymbol"),e=this.childOfName("toSymbol"),i=this.childOfName("label");if(t||e||!i.ignore){for(var n=1,o=this.parent;o;)o.scale&&(n/=o.scale[0]),o=o.parent;var a=this.childOfName("line");if(this.__dirty||a.__dirty){var r=a.shape.percent,s=a.pointAt(0),l=a.pointAt(r),u=ht([],l,s);if(mt(u,u),t){t.attr("position",s);var h=a.tangentAt(0);t.attr("rotation",Math.PI/2-Math.atan2(h[1],h[0])),t.attr("scale",[n*r,n*r])}if(e){e.attr("position",l);h=a.tangentAt(1);e.attr("rotation",-Math.PI/2-Math.atan2(h[1],h[0])),e.attr("scale",[n*r,n*r])}if(!i.ignore){var c,d,f,p;i.attr("position",l);var g=i.__labelDistance,m=g[0]*n,v=g[1]*n,y=r/2,x=[(h=a.tangentAt(y))[1],-h[0]],_=a.pointAt(y);0=t&&(0===e?0:n[e-1][0])a&&(e[1-n]=e[n]+c.sign*a),e}function $w(t,e){var i=t[e]-t[1-e];return{span:Math.abs(i),sign:0o*(1-h[0])?(l="jump",r=s-o*(1-h[2])):0<=(r=s-o*h[1])&&(r=s-o*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?Kw(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[eb(0,a[1]*s/o-o/2)])[1]=tb(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},sh.register("parallel",{create:function(n,o){var a=[];return n.eachComponent("parallel",function(t,e){var i=new rb(t,n,o);i.name="parallel_"+e,i.resize(t,o),(t.coordinateSystem=i).model=t,a.push(i)}),n.eachSeries(function(t){if("parallel"===t.get("coordinateSystem")){var e=n.queryComponents({mainType:"parallel",index:t.get("parallelIndex"),id:t.get("parallelId")})[0];t.coordinateSystem=e.coordinateSystem}}),a}});var lb=Lu.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return ha([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=L(t);if(e)for(var i=e.length-1;0<=i;i--)Bl(e[i])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,o=e.length;nn.getWidth()||i<0||i>n.getHeight()}(t,e)){var n=t._zr,o=t._covers,a=Lb(t,e,i);if(!t._dragging)for(var r=0;rf&&(f=m.depth),g.setLayout({depth:v?m.depth:c},!0),"vertical"===a?g.setLayout({dy:i},!0):g.setLayout({dx:i},!0);for(var y=0;y "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}});function uM(t,e,i){Ci.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}var hM=uM.prototype;function cM(t,e,i){Ci.call(this),this._createPolyline(t,e,i)}hM.createLine=function(t,e,i){return new hw(t,e,i)},hM._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");O(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=_g(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._symbolScale=n,this._updateEffectAnimation(t,i,e))},hM._updateEffectAnimation=function(e,t,i){var n=this.childAt(1);if(n){var o=this,a=e.getItemLayout(i),r=1e3*t.get("period"),s=t.get("loop"),l=t.get("constantSpeed"),u=W(t.get("delay"),function(t){return t/e.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,a),0e);r++);r=Math.min(r-1,o-2)}wt(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},w(fM,uM);var gM=Cs({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(var o=0;o=e[0]&&t<=e[1]}}(y,e.option.range):function(e,n,o){var i=e[1]-e[0],a=(n=N(n,function(t){return{interval:[(t.interval[0]-e[0])/i,(t.interval[1]-e[0])/i]}})).length,r=0;return function(t){for(var e=r;e=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0==o?i.y+i.height/2:i.x+i.width/2,n}}).dimensions});var jM=["axisLine","axisTickLabel","axisName"],qM=["splitArea","splitLine"],KM=pv.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(e,t,i,n){var o=this.group;o.removeAll();var a=this._axisGroup;this._axisGroup=new Ci;var r=YM(e),s=new $m(e,r);E(jM,s.add,s),o.add(this._axisGroup),o.add(s.getGroup()),E(qM,function(t){e.get(t+".show")&&this["_"+t](e)},this),ml(a,this._axisGroup,e),KM.superCall(this,"render",e,t,i,n)},remove:function(){_v(this)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),o=n.get("width"),a=n.get("color");a=a instanceof Array?a:[a];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;fr)return!0;if(a){var s=cv(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=pI(t).pointerEl=new bl[o.type](gI(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=pI(t).labelEl=new rs(gI(e.label));t.add(o),xI(o,n)}},updatePointerEl:function(t,e,i){var n=pI(t).pointerEl;n&&e.pointer&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=pI(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),xI(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e,i=this._axisPointerModel,n=this._api.getZr(),o=this._handle,a=i.getModel("handle"),r=i.get("status");if(!a.get("show")||!r||"hide"===r)return o&&n.remove(o),void(this._handle=null);this._handle||(e=!0,o=this._handle=yl(a.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Xt(t.event)},onmousedown:mI(this._onHandleDragMove,this,0,0),drift:mI(this._onHandleDragMove,this),ondragend:mI(this._onHandleDragEnd,this)}),n.add(o)),wI(o,i,!1);o.setStyle(a.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=a.get("size");O(s)||(s=[s,s]),o.attr("scale",[s[0]/2,s[1]/2]),Lc(this,"_doDispatchAxisPointer",a.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},_moveHandleToValue:function(t,e){yI(this._axisPointerModel,!e&&this._moveAnimation,this._handle,_I(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(_I(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(_I(n)),pI(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return{x:t[i=i||0],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=vI);var LI=vI.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=kI(r,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=bI(n),c=PI[s](a,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}TI(e,t,yv(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=yv(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:II(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=kI(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}}});function kI(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}var PI={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:AI([e,i[0]],[e,i[1]],NI(t))}},shadow:function(t,e,i){var n=Math.max(1,t.getBandWidth()),o=i[1]-i[0];return{type:"Rect",shape:DI([e-n/2,i[0]],[n,o],NI(t))}}};function NI(t){return"x"===t.dim?0:1}pv.registerAxisPointerClass("CartesianAxisPointer",LI),vf(function(t){if(t){t.axisPointer&&0!==t.axisPointer.length||(t.axisPointer={});var e=t.axisPointer.link;e&&!O(e)&&(t.axisPointer.link=[e])}}),yf(Cd.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=uv(t,e)}),xf({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||A(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){rI(r)&&(r=JM({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=rI(r),u=o.axesInfo,h=s.axesInfo,c="leave"===n||rI(r),d={},f={},p={list:[],map:{}},g={showPointer:tI(nI,f),showTooltip:tI(oI,p)};QM(s.coordSysMap,function(t,e){var a=l||t.containPoint(r);QM(s.coordSysAxesInfo[e],function(t,e){var i=t.axis,n=function(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}(u,t);if(!c&&a&&(!u||n)){var o=n&&n.value;null!=o||l||(o=i.pointToData(r)),null!=o&&iI(t,o,g,!1,d)}})});var m={};return QM(h,function(o,t){var a=o.linkGroup;a&&!f[t]&&QM(a.axesInfo,function(t,e){var i=f[e];if(t!==o&&i){var n=i.value;a.mapper&&(n=o.axis.scale.parse(a.mapper(n,aI(t),aI(o)))),m[o.key]=n}})}),QM(m,function(t,e){iI(h[e],t,g,!0,d)}),function(o,t,e){var a=e.axesInfo=[];QM(t,function(t,e){var i=t.axisPointerModel.option,n=o[e];n?(t.useHandle||(i.status="show"),i.value=n.value,i.seriesDataIndices=(n.payloadBatch||[]).slice()):t.useHandle||(i.status="hide"),"show"===i.status&&a.push({axisDim:t.axis.dim,axisIndex:t.axis.model.componentIndex,value:i.value})})}(f,h,d),function(t,e,i,n){if(rI(e)||!t.list.length)return n({type:"hideTip"});var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}(p,r,t,a),function(t,e,i){var n=i.getZr(),o="axisPointerLastHighlights",a=eI(n)[o]||{},r=eI(n)[o]={};QM(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&QM(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;r[e]=t})});var s=[],l=[];E(a,function(t,e){r[e]||l.push(t)}),E(r,function(t,e){a[e]||s.push(t)}),l.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}(h,0,i),d}});var OI=["x","y"],EI=["width","height"],RI=vI.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=VI(r,1-BI(a)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=bI(n),c=zI[u](a,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}TI(e,t,YM(i),i,n,o)},getHandleTransform:function(t,e,i){var n=YM(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:II(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=BI(o),s=VI(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=VI(a,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),zI={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:AI([e,i[0]],[e,i[1]],BI(t))}},shadow:function(t,e,i){var n=t.getBandWidth(),o=i[1]-i[0];return{type:"Rect",shape:DI([e-n/2,i[0]],[n,o],BI(t))}}};function BI(t){return t.isHorizontal()?0:1}function VI(t,e){var i=t.getRect();return[i[OI[e]],i[OI[e]]+i[EI[e]]]}pv.registerAxisPointerClass("SingleAxisPointer",RI),Tf({type:"single"});var GI=rc.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){GI.superApply(this,"init",arguments),this.legendVisualProvider=new Yv(A(this.getData,this),A(this.getRawData,this))},fixData:function(t){var e=t.length,i=ta(t,function(t){return t[2]}),n=[];i.buckets.each(function(t,e){n.push({name:e,dataList:t})});for(var o=n.length,a=-1,r=-1,s=0;sMath.PI/2?"right":"left"):y&&"center"!==y?"left"===y?(d=l.r0+v,f>Math.PI/2&&(y="right")):"right"===y&&(d=l.r-v,f>Math.PI/2&&(y="left")):(d=(l.r+l.r0)/2,y="center"),c.attr("style",{text:s,textAlign:y,textVerticalAlign:S("verticalAlign")||"middle",opacity:S("opacity")});var x=d*p+l.cx,_=d*g+l.cy;c.attr("position",[x,_]);var w=S("rotate"),b=0;function S(t){var e=a.get(t);return null==e?o.get(t):e}"radial"===w?(b=-f)<-Math.PI/2&&(b+=Math.PI):"tangential"===w?(b=Math.PI/2-f)>Math.PI/2?b-=Math.PI:b<-Math.PI/2&&(b+=Math.PI):"number"==typeof w&&(b=w*Math.PI/180),c.attr("rotation",b)},jI._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");function o(){r.onEmphasis(n)}function a(){r.onNormal()}var r=this;i.isAnimationEnabled()&&t.on("mouseover",o).on("mouseout",a).on("emphasis",o).on("normal",a).on("downplay",function(){r.onDownplay()}).on("highlight",function(){r.onHighlight()})},w(YI,Ci);xc.extend({type:"sunburst",init:function(){},render:function(o,a,t,e){var n=this;this.seriesModel=o,this.api=t,this.ecModel=a;var r=o.getData(),s=r.tree.root,i=o.getViewRoot(),l=this.group,u=o.get("renderLabelForZeroData"),h=[];i.eachNode(function(t){h.push(t)});var c=this._oldChildren||[];if(function(i,n){if(0===i.length&&0===n.length)return;function t(t){return t.getId()}function e(t,e){!function(t,e){u||!t||t.getValue()||(t=null);if(t!==s&&e!==s)if(e&&e.piece)t?(e.piece.updateData(!1,t,"normal",o,a),r.setItemGraphicEl(t.dataIndex,e.piece)):function(t){if(!t)return;t.piece&&(l.remove(t.piece),t.piece=null)}(e);else if(t){var i=new YI(t,o,a);l.add(i),r.setItemGraphicEl(t.dataIndex,i)}}(null==t?null:i[t],null==e?null:n[e])}new Lf(n,i,t,t).add(e).update(e).remove(T(e,null)).execute()}(h,c),function(t,e){if(0=i.r0}}});var qI="sunburstRootToNode";xf({type:qI,update:"updateView"},function(o,t){t.eachComponent({mainType:"series",subType:"sunburst",query:o},function(t,e){var i=Wx(o,[qI],t);if(i){var n=t.getViewRoot();n&&(o.direction=Zx(n,i.node)?"rollUp":"drillDown"),t.resetViewRoot(i.node)}})});var KI="sunburstHighlight";xf({type:KI,update:"updateView"},function(n,t){t.eachComponent({mainType:"series",subType:"sunburst",query:n},function(t,e){var i=Wx(n,[KI],t);i&&(n.highlight=i.node)})});xf({type:"sunburstUnhighlight",update:"updateView"},function(i,t){t.eachComponent({mainType:"series",subType:"sunburst",query:i},function(t,e){i.unhighlight=!0})});var $I=Math.PI/180;function JI(t,e){if("function"==typeof e)return t.sort(e);var n="asc"===e;return t.sort(function(t,e){var i=(t.getValue()-e.getValue())*(n?1:-1);return 0==i?(t.dataIndex-e.dataIndex)*(n?-1:1):i})}function QI(a,r){return r=r||[0,0],N(["x","y"],function(t,e){var i=this.getAxis(t),n=r[e],o=a[e]/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))},this)}bf(T(ty,"sunburst")),wf(T(function(t,e,C,i){e.eachSeriesByType(t,function(t){var e=t.get("center"),i=t.get("radius");O(i)||(i=[0,i]),O(e)||(e=[e,e]);var n=C.getWidth(),o=C.getHeight(),h=Math.min(n,o),c=Rl(e[0],n),d=Rl(e[1],o),f=Rl(i[0],h/2),a=Rl(i[1],h/2),r=-t.get("startAngle")*$I,p=t.get("minAngle")*$I,g=t.getData().tree.root,s=t.getViewRoot(),m=s.depth,l=t.get("sort");null!=l&&!function e(t,i){var n=t.children||[];t.children=JI(n,i);n.length&&E(t.children,function(t){e(t,i)})}(s,l);var u=0;E(s.children,function(t){isNaN(t.getValue())||u++});var v=s.getValue(),y=Math.PI/(v||u)*2,x=0t[1]&&t.reverse(),{coordSys:{type:"polar",cx:o.cx,cy:o.cy,r:t[1],r0:t[0]},api:{coord:A(function(t){var e=a.dataToRadius(t[0]),i=r.dataToAngle(t[1]),n=o.coordToPoint([e,i]);return n.push(e,i*Math.PI/180),n}),size:A(iT,o)}}},calendar:function(i){var t=i.getRect(),e=i.getRangeInfo();return{coordSys:{type:"calendar",x:t.x,y:t.y,width:t.width,height:t.height,cellWidth:i.getCellWidth(),cellHeight:i.getCellHeight(),rangeInfo:{start:e.start,end:e.end,weeks:e.weeks,dayCount:e.allDay}},api:{coord:function(t,e){return i.dataToPoint(t,e)}}}}};function hT(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function cT(a,r,e,t){var i=a.get("renderItem"),n=a.coordinateSystem,o={};n&&(o=n.prepareCustoms?n.prepareCustoms():uT[n.type](n));var s,l,u,h,c,d=D({getWidth:t.getWidth,getHeight:t.getHeight,getZr:t.getZr,getDevicePixelRatio:t.getDevicePixelRatio,value:function(t,e){return null==e&&(e=s),r.get(r.getDimension(t||0),e)},style:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(oT).getItemStyle();null!=c&&(i.fill=c);var n=r.getItemVisual(e,"opacity");null!=n&&(i.opacity=n);var o=t?mT(t,u):u;return nl(i,o,null,{autoColor:c,isRectText:!0}),i.text=o.getShallow("show")?H(a.getFormattedLabel(e,"normal"),Zg(r,e)):null,t&&vT(i,t),i},styleEmphasis:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(aT).getItemStyle(),n=t?mT(t,h):h;return nl(i,n,null,{isRectText:!0},!0),i.text=n.getShallow("show")?Z(a.getFormattedLabel(e,"emphasis"),a.getFormattedLabel(e,"normal"),Zg(r,e)):null,t&&vT(i,t),i},visual:function(t,e){return null==e&&(e=s),r.getItemVisual(e,t)},barLayout:function(t){if(n.getBaseAxis){return function(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),o=0;oe[1]&&e.reverse();var i=t.getExtent(),n=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:e[0],r:e[1],startAngle:-i[0]*n,endAngle:-i[1]*n,clockwise:t.inverse,contain:function(t,e){var i=t-this.cx,n=e-this.cy,o=i*i+n*n,a=this.r,r=this.r0;return o<=a*a&&r*r<=o}}}};var AT=Lu.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});m(AT.prototype,cg);var DT={splitNumber:5};function CT(t,e){return e.type||(e.data?"category":"value")}function LT(t,e){var i=this,n=i.getAngleAxis(),o=i.getRadiusAxis();if(n.scale.setExtent(1/0,-1/0),o.scale.setExtent(1/0,-1/0),t.eachSeries(function(t){if(t.coordinateSystem===i){var e=t.getData();E(e.mapDimension("radius",!0),function(t){o.scale.unionExtentFromData(e,fp(e,t))}),E(e.mapDimension("angle",!0),function(t){n.scale.unionExtentFromData(e,fp(e,t))})}}),ag(n.scale,n.model),ag(o.scale,o.model),"category"===n.type&&!n.onBand){var a=n.getExtent(),r=360/n.scale.count();n.inverse?a[1]+=r:a[1]-=r,n.setExtent(a[0],a[1])}}function kT(t,e){if(t.type=e.get("type"),t.scale=rg(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),"angleAxis"===e.mainType){t.inverse^=e.get("clockwise");var i=e.get("startAngle");t.setExtent(i,i+(t.inverse?-360:360))}(e.axis=t).model=e}Bm("angle",AT,CT,{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}}),Bm("radius",AT,CT,DT),If({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}}),sh.register("polar",{dimensions:TT.prototype.dimensions,create:function(i,s){var l=[];return i.eachComponent("polar",function(t,e){var i=new TT(e);i.update=LT;var n=i.getRadiusAxis(),o=i.getAngleAxis(),a=t.findAxisModel("radiusAxis"),r=t.findAxisModel("angleAxis");kT(n,a),kT(o,r),function(t,e,i){var n=e.get("center"),o=i.getWidth(),a=i.getHeight();t.cx=Rl(n[0],o),t.cy=Rl(n[1],a);var r=t.getRadiusAxis(),s=Math.min(o,a)/2,l=e.get("radius");null==l?l=[0,"100%"]:O(l)||(l=[0,l]),l=[Rl(l[0],s),Rl(l[1],s)],r.inverse?r.setExtent(l[1],l[0]):r.setExtent(l[0],l[1])}(i,t,s),l.push(i),(t.coordinateSystem=i).model=t}),i.eachSeries(function(t){if("polar"===t.get("coordinateSystem")){var e=i.queryComponents({mainType:"polar",index:t.get("polarIndex"),id:t.get("polarId")})[0];t.coordinateSystem=e.coordinateSystem}}),l}});var PT=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function NT(t,e,i){e[1]>e[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function OT(t){return t.getRadiusAxis().inverse?0:1}function ET(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}pv.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(e,t){if(this.group.removeAll(),e.get("show")){var i=e.axis,n=i.polar,o=n.getRadiusAxis().getExtent(),a=i.getTicksCoords(),r=i.getMinorTicksCoords(),s=N(i.getViewLabels(),function(t){return(t=L(t)).coord=i.dataToCoord(t.tickValue),t});ET(s),ET(a),E(PT,function(t){!e.get(t+".show")||i.scale.isBlank()&&"axisLine"!==t||this["_"+t](e,n,a,r,o,s)},this)}},_axisLine:function(t,e,i,n,o){var a,r=t.getModel("axisLine.lineStyle"),s=OT(e),l=s?0:1;(a=0===o[l]?new Yr({shape:{cx:e.cx,cy:e.cy,r:o[s]},style:r.getLineStyle(),z2:1,silent:!0}):new Kr({shape:{cx:e.cx,cy:e.cy,r:o[s],r0:o[l]},style:r.getLineStyle(),z2:1,silent:!0})).style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n,o){var a=t.getModel("axisTick"),r=(a.get("inside")?-1:1)*a.get("length"),s=o[OT(e)],l=N(i,function(t){return new ls({shape:NT(e,[s,s+r],t.coord)})});this.group.add(Es(l,{style:D(a.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_minorTick:function(t,e,i,n,o){if(n.length){for(var a=t.getModel("axisTick"),r=t.getModel("minorTick"),s=(a.get("inside")?-1:1)*r.get("length"),l=o[OT(e)],u=[],h=0;hr?"left":"right",u=Math.abs(a[1]-s)/o<.3?"middle":a[1]>s?"top":"bottom";p&&p[n]&&p[n].textStyle&&(i=new Cl(p[n].textStyle,g,g.ecModel));var h=new Ur({silent:$m.isLabelSilent(c)});this.group.add(h),nl(h.style,i,{x:a[0],y:a[1],textFill:i.getTextColor()||c.get("axisLine.lineStyle.color"),text:t.formattedLabel,textAlign:l,textVerticalAlign:u}),v&&(h.eventData=$m.makeAxisEventDataBase(c),h.eventData.targetType="axisLabel",h.eventData.value=t.rawLabel)},this)},_splitLine:function(t,e,i,n,o){var a=t.getModel("splitLine").getModel("lineStyle"),r=a.get("color"),s=0;r=r instanceof Array?r:[r];for(var l=[],u=0;um?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}(e,i,0,s,d))}});var VT={line:function(t,e,i,n,o){return"angle"===t.dim?{type:"Line",shape:AI(e.coordToPoint([n[0],i]),e.coordToPoint([n[1],i]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:i}}},shadow:function(t,e,i,n,o){var a=Math.max(1,t.getBandWidth()),r=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:CI(e.cx,e.cy,n[0],n[1],(-i-a/2)*r,(a/2-i)*r)}:{type:"Sector",shape:CI(e.cx,e.cy,i-a/2,i+a/2,0,2*Math.PI)}}};function GT(n,t){t.update="updateView",xf(t,function(t,e){var i={};return e.eachComponent({mainType:"geo",query:t},function(e){e[n](t.name),E(e.coordinateSystem.regions,function(t){i[t.name]=e.isSelected(t.name)||!1})}),{selected:i,name:t.name}})}pv.registerAxisPointerClass("PolarAxisPointer",BT),wf(T(function(t,e,i){var N={},O=function(t){var g={};E(t,function(t,e){var i=t.getData(),n=t.coordinateSystem,o=n.getBaseAxis(),a=bT(n,o),r=o.getExtent(),s="category"===o.type?o.getBandWidth():Math.abs(r[1]-r[0])/i.count(),l=g[a]||{bandWidth:s,remainedWidth:s,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},u=l.stacks;g[a]=l;var h=wT(t);u[h]||l.autoWidthCount++,u[h]=u[h]||{width:0,maxWidth:0};var c=Rl(t.get("barWidth"),s),d=Rl(t.get("barMaxWidth"),s),f=t.get("barGap"),p=t.get("barCategoryGap");c&&!u[h].width&&(c=Math.min(l.remainedWidth,c),u[h].width=c,l.remainedWidth-=c),d&&(u[h].maxWidth=d),null!=f&&(l.gap=f),null!=p&&(l.categoryGap=p)});var d={};return E(g,function(t,i){d[i]={};var e=t.stacks,n=t.bandWidth,o=Rl(t.categoryGap,n),a=Rl(t.gap,1),r=t.remainedWidth,s=t.autoWidthCount,l=(r-o)/(s+(s-1)*a);l=Math.max(l,0),E(e,function(t,e){var i=t.maxWidth;i&&i=n.start.time&&i.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();if(n.setDate(o+i-1),n.getDate()!==a)for(var r=0n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},FT.dimensions=FT.prototype.dimensions,FT.getDimensionsInfo=FT.prototype.getDimensionsInfo,FT.create=function(i,n){var o=[];return i.eachComponent("calendar",function(t){var e=new FT(t,i,n);o.push(e),t.coordinateSystem=e}),i.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=o[t.get("calendarIndex")||0])}),o},sh.register("calendar",FT);var HT=Lu.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=Mu(t);HT.superApply(this,"init",arguments),ZT(t,o)},mergeOption:function(t,e){HT.superApply(this,"mergeOption",arguments),ZT(this.option,t)}});function ZT(t,e){var i=t.cellSize;O(i)?1===i.length&&(i[1]=i[0]):i=t.cellSize=[i,i];var n=N([0,1],function(t){return function(t,e){return null!=t[yu[e][0]]||null!=t[yu[e][1]]&&null!=t[yu[e][2]]}(e,t)&&(i[t]="auto"),null!=i[t]&&"auto"!==i[t]});Su(t,e,{type:"box",ignoreSize:n})}var UT={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},XT={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};Tf({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new rs({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(u)}},_renderLines:function(i,t,n,o){var a=this,r=i.coordinateSystem,s=i.getModel("splitLine.lineStyle").getLineStyle(),l=i.get("splitLine.show"),e=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=t.start,h=0;u.time<=t.end.time;h++){d(u.formatedDate),0===h&&(u=r.getDateInfo(t.start.y+"-"+t.start.m));var c=u.date;c.setMonth(c.getMonth()+1),u=r.getDateInfo(c)}function d(t){a._firstDayOfMonth.push(r.getDateInfo(t)),a._firstDayPoints.push(r.dataToRect([t],!1).tl);var e=a._getLinePointsOfOneWeek(i,t,n);a._tlpoints.push(e[0]),a._blpoints.push(e[e.length-1]),l&&a._drawSplitline(e,s,o)}d(r.getNextNDay(t.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,e,n),s,o),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,e,n),s,o)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new ts({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?uu(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r=r||("horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new Ur({z2:30});nl(m.style,o,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),a=n.get("margin"),r=n.get("position"),s=n.get("align"),l=[this._tlpoints,this._blpoints];R(o)&&(o=UT[o.toUpperCase()]||[]);var u="start"===r?0:1,h="horizontal"===e?0:1;a="start"===r?-a:a;for(var c="center"===s,d=0;dd.getHeight()&&(i.textPosition="top",a=!0);var r=a?-5-n.height:p+8;o+n.width/2>d.getWidth()?(i.textPosition=["100%",r],i.textAlign="right"):o-n.width/2<0&&(i.textPosition=[0,r],i.textAlign="left")}})}function t(t,e){var i,n=m[t],o=m[e],a=u[n],r=new Cl(a,h,h.ecModel);if(l&&null!=l.newTitle&&(a.title=l.newTitle),n&&!o){if(function(t){return 0===t.indexOf("my")}(n))i={model:r,onclick:r.option.onclick,featureName:n};else{var s=tA(n);if(!s)return;i=new s(r,c,d)}g[n]=i}else{if(!(i=g[o]))return;i.model=r,i.ecModel=c,i.api=d}n||!o?r.get("show")&&!i.unusable?(function(o,a,t){var r=o.getModel("iconStyle"),s=o.getModel("emphasis.iconStyle"),e=a.getIcons?a.getIcons():o.get("icon"),l=o.get("title")||{};if("string"==typeof e){var i=e,n=l;l={},(e={})[t]=i,l[t]=n}var u=o.iconPaths={};E(e,function(t,e){var i=yl(t,{},{x:-p/2,y:-p/2,width:p,height:p});i.setStyle(r.getItemStyle()),i.hoverStyle=s.getItemStyle(),i.setStyle({text:l[e],textAlign:s.get("textAlign"),textBorderRadius:s.get("textBorderRadius"),textPadding:s.get("textPadding"),textFill:null});var n=h.getModel("tooltip");n&&n.get("show")&&i.attr("tooltip",k({content:l[e],formatter:n.get("formatter",!0)||function(){return l[e]},formatterParams:{componentType:"toolbox",name:e,title:l[e],$vars:["name","title"]},position:n.get("position",!0)||"bottom"},n.option)),$s(i),h.get("showTitle")&&(i.__title=l[e],i.on("mouseover",function(){var t=s.getItemStyle(),e="vertical"===h.get("orient")?null==h.get("right")?"right":"left":null==h.get("bottom")?"bottom":"top";i.setStyle({textFill:s.get("textFill")||t.fill||t.stroke||"#000",textBackgroundColor:s.get("textBackgroundColor"),textPosition:s.get("textPosition")||e})}).on("mouseout",function(){i.setStyle({textFill:null,textBackgroundColor:null})})),i.trigger(o.get("iconStatus."+e)||"normal"),f.add(i),i.on("click",A(a.onclick,a,c,d,e)),u[e]=i})}(r,i,n),r.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},i.render&&i.render(r,c,d,l)):i.remove&&i.remove(c,d):i.dispose&&i.dispose(c,d)}},updateView:function(t,e,i,n){E(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(e,i){E(this._features,function(t){t.remove&&t.remove(e,i)}),this.group.removeAll()},dispose:function(e,i){E(this._features,function(t){t.dispose&&t.dispose(e,i)})}});var nA=Nc.toolbox.saveAsImage;function oA(t){this.model=t}oA.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:nA.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:nA.lang.slice()},oA.prototype.unusable=!v.canvasSupported,oA.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=i.get("type",!0)||"png",a=e.getConnectedDataURL({type:o,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:i.get("connectedBackgroundColor"),excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if("function"!=typeof MouseEvent||v.browser.ie||v.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var r=atob(a.split(",")[1]),s=r.length,l=new Uint8Array(s);s--;)l[s]=r.charCodeAt(s);var u=new Blob([l]);window.navigator.msSaveOrOpenBlob(u,n+"."+o)}else{var h=i.get("lang"),c='';window.open().document.write(c)}else{var d=document.createElement("a");d.download=n+"."+o,d.target="_blank",d.href=a;var f=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});d.dispatchEvent(f)}},QT("saveAsImage",oA);var aA=Nc.toolbox.magicType,rA="__ec_magicType_stack__";function sA(t){this.model=t}sA.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:L(aA.title),option:{},seriesIndex:{}};var lA=sA.prototype;lA.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return E(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var uA={line:function(t,e,i,n){if("bar"===t)return m({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.line")||{},!0)},bar:function(t,e,i,n){if("line"===t)return m({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.bar")||{},!0)},stack:function(t,e,i,n){var o=i.get("stack")===rA;if("line"===t||"bar"===t)return n.setIconStatus("stack",o?"normal":"emphasis"),m({id:e,stack:o?"":rA},n.get("option.stack")||{},!0)}},hA=[["line","bar"],["stack"]];lA.onclick=function(u,t,h){var c=this.model,e=c.get("seriesIndex."+h);if(uA[h]){var i,d={series:[]};if(E(hA,function(t){0<=_(t,h)&&E(t,function(t){c.setIconStatus(t,"normal")})}),c.setIconStatus(h,"emphasis"),u.eachComponent({mainType:"series",query:null==e?null:{seriesIndex:e}},function(t){var e=t.subType,i=t.id,n=uA[h](e,i,t,c);n&&(D(n,t.option),d.series.push(n));var o=t.coordinateSystem;if(o&&"cartesian2d"===o.type&&("line"===h||"bar"===h)){var a=o.getAxesByScale("ordinal")[0];if(a){var r=a.dim+"Axis",s=u.queryComponents({mainType:r,index:t.get(name+"Index"),id:t.get(name+"Id")})[0].componentIndex;d[r]=d[r]||[];for(var l=0;l<=s;l++)d[r][s]=d[r][s]||{};d[r][s].boundaryGap="bar"===h}}}),"stack"===h)i=d.series&&d.series[0]&&d.series[0].stack===rA?m({stack:aA.title.tiled},aA.title):L(aA.title);t.dispatchAction({type:"changeMagicType",currentType:h,newOption:d,newTitle:i})}},xf({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),QT("magicType",sA);var cA=Nc.toolbox.dataView,dA=new Array(60).join("-"),fA="\t";function pA(t){var e=function(t){var o={},a=[],r=[];return t.eachRawSeries(function(t){var e=t.coordinateSystem;if(!e||"cartesian2d"!==e.type&&"polar"!==e.type)a.push(t);else{var i=e.getBaseAxis();if("category"===i.type){var n=i.dim+"_"+i.index;o[n]||(o[n]={categoryAxis:i,valueAxis:e.getOtherAxis(i),series:[]},r.push({axisDim:i.dim,axisIndex:i.index})),o[n].series.push(t)}else a.push(t)}}),{seriesGroupByCategoryAxis:o,other:a,meta:r}}(t);return{value:M([function(t){var h=[];return E(t,function(t,e){var i=t.categoryAxis,n=t.valueAxis.dim,o=[" "].concat(N(t.series,function(t){return t.name})),a=[i.model.getCategories()];E(t.series,function(t){a.push(t.getRawData().mapArray(n,function(t){return t}))});for(var r=[o.join(fA)],s=0;st[1]&&t.reverse(),t}function AA(t,e){return Ko(t,e,{includeMainTypes:SA})}IA.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,i){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var n=kA[t.brushType](0,i,e);t.__rangeOffset={offset:NA[t.brushType](n.values,t.range,[1,1]),xyMinMax:n.xyMinMax}}})},IA.matchOutputRanges=function(t,n,o){xA(t,function(i){var t=this.findTargetInfo(i,n);t&&!0!==t&&E(t.coordSyses,function(t){var e=kA[i.brushType](1,t,i.range);o(i,e.values,t,n)})},this)},IA.setInputRanges=function(t,o){xA(t,function(t){var e=this.findTargetInfo(t,o);if(t.range=t.range||[],e&&!0!==e){t.panelId=e.panelId;var i=kA[t.brushType](0,e.coordSys,t.coordRange),n=t.__rangeOffset;t.range=n?NA[t.brushType](i.values,n.offset,function(t,e){var i=EA(t),n=EA(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}(i.xyMinMax,n.xyMinMax)):i.values}},this)},IA.makePanelOpts=function(i,n){return N(this._targetInfoList,function(t){var e=t.getPanelRect();return{panelId:t.panelId,defaultBrushType:n&&n(t),clipPath:Qb(e),isTargetByCursor:eS(e,i,t.coordSysModel),getLinearBrushOtherExtent:tS(e)}})},IA.controlSeries=function(t,e,i){var n=this.findTargetInfo(t,i);return!0===n||n&&0<=_A(n.coordSyses,e.coordinateSystem)},IA.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=AA(e,t),o=0;on[1]&&(n[1]=e[1])})}),n[1]c[1];if(r&&!s&&!l)return!0;r&&(n=!0),s&&(e=!0),l&&(i=!0)}return n&&e&&i}):YA(h,function(t){if("empty"===o)i.setData(u=u.map(t,function(t){return function(t){return t>=c[0]&&t<=c[1]}(t)?t:NaN}));else{var e={};e[t]=c,u.selectRange(e)}}),YA(h,function(t){u.setApproximateExtent(c,t)}))})}}};var KA=E,$A=ZA,JA=If({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=QA(t);this.settledOption=n,this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=QA(t);m(this.option,t,!0),m(this.settledOption,e,!0),this.doInit(e)},doInit:function(t){var i=this.option;v.canvasSupported||(i.realtime=!1),this._setDefaultThrottle(t),tD(this,t);var n=this.settledOption;KA([["start","startValue"],["end","endValue"]],function(t,e){"value"===this._rangePropMode[e]&&(i[t[0]]=n[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var r=this._axisProxies;this.eachTargetAxis(function(t,e,i,n){var o=this.dependentModels[t.axis][e],a=o.__dzAxisProxy||(o.__dzAxisProxy=new XA(t.name,e,this,n));r[t.name+"_"+e]=a},this)},_resetTarget:function(){var i=this.option,t=this._judgeAutoMode();$A(function(t){var e=t.axisIndex;i[e]=Vo(i[e])},this),"axisIndex"===t?this._autoSetAxisIndex():"orient"===t&&this._autoSetOrient()},_judgeAutoMode:function(){var e=this.option,i=!1;$A(function(t){null!=e[t.axisIndex]&&(i=!0)},this);var t=e.orient;return null==t&&i?"orient":i?void 0:(null==t&&(e.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var a=!0,e=this.get("orient",!0),r=this.option,t=this.dependentModels;if(a){var i="vertical"===e?"y":"x";t[i+"Axis"].length?(r[i+"AxisIndex"]=[0],a=!1):KA(t.singleAxis,function(t){a&&t.get("orient",!0)===e&&(r.singleAxisIndex=[t.componentIndex],a=!1)})}a&&$A(function(t){if(a){var e=[],i=this.dependentModels[t.axis];if(i.length&&!e.length)for(var n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&FD(e)}};function FD(t){return new Di(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var WD=["#ddd"];If({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;e||DD(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:WD},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=N(t,function(t){return HD(this.option,t)},this))},setBrushOption:function(t){this.brushOption=HD(this.option,t),this.brushType=this.brushOption.brushType}});function HD(t,e){return m({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Cl(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}function ZD(t,e,i,n){n&&n.$from===t.id||this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}Tf({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Sb(e.getZr())).on("brush",A(this._onBrush,this)).mount()},render:function(t){return this.model=t,ZD.apply(this,arguments)},updateTransform:function(t,e){return RD(e),ZD.apply(this,arguments)},updateView:ZD,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var i=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),e.isEnd&&!e.removeOnClick||this.api.dispatchAction({type:"brush",brushId:i,areas:L(t),$from:i}),e.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:i,areas:L(t),$from:i})}}),xf({type:"brush",event:"brush"},function(e,t){t.eachComponent({mainType:"brush",query:e},function(t){t.setAreas(e.areas)})}),xf({type:"brushSelect",event:"brushSelected",update:"none"},function(){}),xf({type:"brushEnd",event:"brushEnd",update:"none"},function(){});var UD=Nc.toolbox.brush;function XD(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}XD.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:L(UD.title)};var YD=XD.prototype;YD.render=YD.updateView=function(e,t,i){var n,o,a;t.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,E(e.get("type",!0),function(t){e.setIconStatus(t,("keep"===t?"multiple"===o:"clear"===t?a:t===n)?"emphasis":"normal")})},YD.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return E(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},YD.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},QT("brush",XD),vf(function(t,e){var i=t&&t.brush;if(O(i)||(i=i?[i]:[]),i.length){var n=[];E(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;O(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),function(i){var e={};E(i,function(t){e[t]=1}),i.length=0,E(e,function(t,e){i.push(e)})}(s),e&&!s.length&&s.push.apply(s,MD)}}),If({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),Tf({type:"title",render:function(t,e,i){if(this.group.removeAll(),t.get("show")){var n=this.group,o=t.getModel("textStyle"),a=t.getModel("subtextStyle"),r=t.get("textAlign"),s=H(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Ur({style:nl({},o,{text:t.get("text"),textFill:o.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Ur({style:nl({},a,{text:h,textFill:a.getTextColor(),y:u.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),f=t.get("sublink"),p=t.get("triggerEvent",!0);l.silent=!d&&!p,c.silent=!f&&!p,d&&l.on("click",function(){window.open(d,"_"+t.get("target"))}),f&&c.on("click",function(){window.open(f,"_"+t.get("subtarget"))}),l.eventData=c.eventData=p?{componentType:"title",componentIndex:t.componentIndex}:null,n.add(l),h&&n.add(c);var g=n.getBoundingRect(),m=t.getBoxLayoutParams();m.width=g.width,m.height=g.height;var v=wu(m,{width:i.getWidth(),height:i.getHeight()},t.get("padding"));r||("middle"===(r=t.get("left")||t.get("right"))&&(r="center"),"right"===r?v.x+=v.width:"center"===r&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),n.attr("position",[v.x,v.y]);var y={textAlign:r,textVerticalAlign:s};l.setStyle(y),c.setStyle(y),g=n.getBoundingRect();var x=v.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var w=new rs({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:t.get("borderRadius")},style:_,subPixelOptimize:!0,silent:!0});n.add(w)}}});function jD(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),a={normal:1,emphasis:1};E(n,function(t,e){a[e]||qD(o,e)||(o[e]=t)}),i.label&&!qD(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function qD(t,e){return t.hasOwnProperty(e)}Lu.registerSubTypeDefaulter("timeline",function(){return"slider"}),xf({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),D({currentIndex:i.option.currentIndex},t)}),xf({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var KD=Lu.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){KD.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(e<=t&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,o=this._names=[];if("category"===i){var a=[];E(e,function(t,e){var i,n=Wo(t);z(t)?(i=L(t)).value=e:i=e,a.push(i),R(n)||null!=n&&!isNaN(n)||(n=""),o.push(n+"")}),e=a}var n={category:"ordinal",time:"time"}[i]||"number";(this._data=new Xf([{name:"value",type:n}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});b(KD.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),Uh);function $D(t,e,i,n){Vg.call(this,t,e,i),this.type=n||"value",this.model=null}var JD=pc.extend({type:"timeline"});$D.prototype={constructor:$D,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},w($D,Vg);var QD=A,tC=E,eC=Math.PI;function iC(t,e,i,n,o,a){var r=e.get("color");o?(o.setColor(r),i.add(o),a&&a.onUpdate(o)):((o=_g(t.get("symbol"),-1,-1,2,2,r)).setStyle("strokeNoScale",!0),i.add(o),a&&a.onCreate(o));var s=e.getItemStyle(["color","symbol","symbolSize"]);o.setStyle(s),n=m({rectHover:!0,z2:100},n,!0);var l=t.get("symbolSize");(l=l instanceof Array?l.slice():[+l,+l])[0]/=2,l[1]/=2,n.scale=l;var u=t.get("symbolOffset");if(u){var h=n.position=n.position||[0,0];h[0]+=Rl(u[0],l[0]),h[1]+=Rl(u[1],l[1])}var c=t.get("symbolRotate");return n.rotation=(c||0)*Math.PI/180||0,o.attr(n),o.updateTransform(),o}function nC(t,e,i,n,o){if(!t.dragging){var a=n.getModel("checkpointStyle"),r=i.dataToCoord(n.getData().get(["value"],e));o||!a.get("animation",!0)?t.attr({position:[r,0]}):(t.stopAnimation(!0),t.animateTo({position:[r,0]},a.get("animationDuration",!0),a.get("animationEasing",!0)))}}JD.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(e,t,i,n){if(this.model=e,this.api=i,this.ecModel=t,this.group.removeAll(),e.get("show",!0)){var o=this._layout(e,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,e);e.formatTooltip=function(t){return au(s.scale.getLabel(t))},tC(["AxisLine","AxisTick","Control","CurrentPointer"],function(t){this["_render"+t](o,a,s,e)},this),this._renderAxisLabel(o,r,s,e),this._position(o,e)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),o=function(t,e){return wu(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2n[1]&&(i=n[1]),i"),o&&(a+=aC(o),null!=i&&(a+=" : ")),null!=i&&(a+=aC(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});b(sC,Uh),sC.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var lC=_;function uC(t,e,i,n,o,a){var r=[],s=dp(e,n)?e.getCalculationInfo("stackResultDimension"):n,l=mC(e,s,t),u=e.indicesOfNearest(s,l)[0];r[o]=e.get(i,u),r[a]=e.get(s,u);var h=e.get(n,u),c=Vl(e.get(n,u));return 0<=(c=Math.min(c,20))&&(r[a]=+r[a].toFixed(c)),[r,h]}var hC=T,cC={min:hC(uC,"min"),max:hC(uC,"max"),average:hC(uC,"average")};function dC(t,e){var i=t.getData(),n=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!O(e.coord)&&n){var o=n.dimensions,a=fC(e,i,n,t);if((e=L(e)).type&&cC[e.type]&&a.baseAxis&&a.valueAxis){var r=lC(o,a.baseAxis.dim),s=lC(o,a.valueAxis.dim),l=cC[e.type](i,a.baseDataDim,a.valueDataDim,r,s);e.coord=l[0],e.value=l[1]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)cC[u[h]]&&(u[h]=mC(i,i.mapDimension(o[h]),u[h]));e.coord=u}}return e}function fC(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(function(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var o=0;oi[o],f=[-h.x,-h.y];e||(f[n]=s.position[n]);var p=[0,0],g=[-c.x,-c.y],m=H(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?g[n]+=i[o]-c[o]:p[n]+=c[o]+m);g[1-n]+=h[a]/2-c[a]/2,s.attr("position",f),l.attr("position",p),u.attr("position",g);var v={x:0,y:0};if(v[o]=d?i[o]:h[o],v[a]=Math.max(h[a],c[a]),v[r]=Math.min(0,c[r]+g[1-n]),l.__rectSize=i[o],d){var y={x:0,y:0};y[o]=Math.max(i[o]-c[o]-m,0),y[a]=v[a],l.setClipPath(new rs({shape:y})),l.__rectSize=y[o]}else u.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&cl(s,{position:x.contentPosition},d&&t),this._updatePageInfoView(t,x),v},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(n,o){var a=this._controllerGroup;E(["pagePrev","pageNext"],function(t){var e=null!=o[t+"DataIndex"],i=a.childOfName(t);i&&(i.setStyle("fill",e?n.get("pageIconColor",!0):n.get("pageIconInactiveColor",!0)),i.cursor=e?"pointer":"default")});var t=a.childOfName("pageText"),e=n.get("pageFormatter"),i=o.pageIndex,r=null!=i?i+1:0,s=o.pageCount;t&&e&&t.setStyle("text",R(e)?e.replace("{current}",r).replace("{total}",s):e({current:r,total:s}))},_getPageInfo:function(t){var e=t.get("scrollDataIndex",!0),i=this.getContentGroup(),n=this._containerGroup.__rectSize,o=t.getOrient().index,a=UC[o],r=XC[o],s=this._findTargetItemIndex(e),l=i.children(),u=l[s],h=l.length,c=h?1:0,d={contentPosition:i.position.slice(),pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return d;var f=y(u);d.contentPosition[o]=-f.s;for(var p=s+1,g=f,m=f,v=null;p<=h;++p)(!(v=y(l[p]))&&m.e>g.s+n||v&&!x(v,g.s))&&(g=m.i>g.i?m:v)&&(null==d.pageNextDataIndex&&(d.pageNextDataIndex=g.i),++d.pageCount),m=v;for(p=s-1,g=f,m=f,v=null;-1<=p;--p)(v=y(l[p]))&&x(m,v.s)||!(g.i=e&&t.s<=e+n}},_findTargetItemIndex:function(n){return this._showController?(this.getContentGroup().eachChild(function(t,e){var i=t.__legendDataIndex;null==a&&null!=i&&(a=e),i===n&&(o=e)}),null!=o?o:a):0;var o,a}});xf("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})});JA.extend({type:"dataZoom.slider",layoutMode:"box",defaultOption:{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#2f4554",width:.5,opacity:.3},areaStyle:{color:"rgba(47,69,84,0.3)",opacity:.3}},borderColor:"#ddd",fillerColor:"rgba(167,183,204,0.4)",handleIcon:"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",handleSize:"100%",handleStyle:{color:"#a7b7cc"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#333"}}});var jC=rs,qC=El,KC=Bl,$C=A,JC=E,QC="horizontal",tL="vertical",eL=["line","bar","candlestick","scatter"],iL=eD.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){iL.superApply(this,"render",arguments),Lc(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),!1!==this.dataZoomModel.get("show")?(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){iL.superApply(this,"remove",arguments),kc(this,"_dispatchZoomAction")},dispose:function(){iL.superApply(this,"dispose",arguments),kc(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new Ci;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},o=this._orient===QC?{right:n.width-i.x-i.width,top:n.height-30-7,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=Mu(t.option);E(["right","top","width","height"],function(t){"ph"===a[t]&&(a[t]=o[t])});var r=wu(a,n,t.padding);this._location={x:r.x,y:r.y},this._size=[r.width,r.height],this._orient===tL&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),o=n&&n.get("inverse"),a=this._displayables.barGroup,r=(this._dataShadowInfo||{}).otherAxisInverse;a.attr(i!==QC||o?i===QC&&o?{scale:r?[-1,1]:[-1,-1]}:i!==tL||o?{scale:r?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:r?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:r?[1,1]:[1,-1]});var s=t.getBoundingRect([a]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size,i=this._displayables.barGroup;i.add(new jC({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40})),i.add(new jC({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:A(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),o=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=o){var a=n.getDataExtent(o),r=.3*(a[1]-a[0]);a=[a[0]-r,a[1]+r];var s,l=[0,e[1]],u=[0,e[0]],h=[[e[0],0],[0,0]],c=[],d=u[1]/(n.count()-1),f=0,p=Math.round(n.count()/e[0]);n.each([o],function(t,e){if(0e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-o);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var i;if(JC(this.getTargetCoordInfo(),function(t){if(!i&&t.length){var e=t[0].model.coordinateSystem;i=e.getRect&&e.getRect()}}),!i){var t=this.api.getWidth(),e=this.api.getHeight();i={x:.2*t,y:.2*e,width:.6*t,height:.6*e}}return i}});function nL(t){return"vertical"===t?"ns-resize":"ew-resize"}JA.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var oL="\0_ec_dataZoom_roams";function aL(t,n){var e=sL(t),o=n.dataZoomId,a=n.coordId;E(e,function(t,e){var i=t.dataZoomInfos;i[o]&&_(n.allCoordIds,a)<0&&(delete i[o],t.count--)}),lL(e);var i=e[a];i||((i=e[a]={coordId:a,dataZoomInfos:{},count:0}).controller=function(t,r){var e=new zy(t.getZr());return E(["pan","zoom","scrollMove"],function(a){e.on(a,function(n){var o=[];E(r.dataZoomInfos,function(t){if(n.isAvailableBehavior(t.dataZoomModel.option)){var e=(t.getRange||{})[a],i=e&&e(r.controller,n);!t.dataZoomModel.get("disabled",!0)&&i&&o.push({dataZoomId:t.dataZoomId,start:i[0],end:i[1]})}}),o.length&&r.dispatchAction(o)})}),e}(t,i),i.dispatchAction=T(uL,t)),i.dataZoomInfos[o]||i.count++,i.dataZoomInfos[o]=n;var r=function(t){var n,o={type_true:2,type_move:1,type_false:0,type_undefined:-1},a=!0;return E(t,function(t){var e=t.dataZoomModel,i=!e.get("disabled",!0)&&(!e.get("zoomLock",!0)||"move");o["type_"+n]"],O(t)&&(t=t.slice(),n=!0),o=e?t:n?[u(t[0]),u(t[1])]:u(t),R(l)?l.replace("{value}",n?o[0]:o).replace("{value2}",n?o[1]:o):C(l)?n?l(t[0],t[1]):l(t):n?t[0]===s[0]?i[0]+" "+o[1]:t[1]===s[1]?i[1]+" "+o[0]:o[0]+" - "+o[1]:o;function u(t){return t===s[0]?"min":t===s[1]?"max":(+t).toFixed(Math.min(r,20))}},resetExtent:function(){var t=this.option,e=TL([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,o=n.length-1;0<=o;o--){var a=n[o];if(!t.getDimensionInfo(a).isCalculationCoord)return a}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){var t=this.ecModel,e=this.option,i={inRange:e.inRange,outOfRange:e.outOfRange},n=e.target||(e.target={}),o=e.controller||(e.controller={});m(n,i),m(o,i);var u=this.isCategory();function a(n){ML(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")},IL(this.stateList,function(t){var e=n[t];if(R(e)){var i=_L(e,"active",u);i?(n[t]={},n[t][e]=i):delete n[t]}},this)}a.call(this,n),a.call(this,o),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},IL(n,function(t,e){if(f_.isValidType(e)){var i=_L(e,"inactive",u);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,n,"inRange","outOfRange"),function(a){var r=(a.inRange||{}).symbol||(a.outOfRange||{}).symbol,s=(a.inRange||{}).symbolSize||(a.outOfRange||{}).symbolSize,l=this.get("inactiveColor");IL(this.stateList,function(t){var e=this.itemSize,i=a[t];null==(i=i||(a[t]={color:u?l:[l]})).symbol&&(i.symbol=r&&L(r)||(u?"roundRect":["roundRect"])),null==i.symbolSize&&(i.symbolSize=s&&L(s)||(u?e[0]:[e[0],e[0]])),i.symbol=bL(i.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var n=i.symbolSize;if(null!=n){var o=-1/0;SL(n,function(t){oe[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){DL.prototype.completeVisualOption.apply(this,arguments),E(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Bl((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(n){var o=[];return this.eachTargetSeries(function(t){var i=[],e=t.getData();e.each(this.getDataDimension(e),function(t,e){n[0]<=t&&t<=n[1]&&i.push(e)},this),o.push({seriesId:t.id,dataIndex:i})},this),o},getVisualMeta:function(i){var t=kL(this,"outOfRange",this.getExtent()),e=kL(this,"inRange",this.option.range.slice()),n=[];function o(t,e){n.push({value:t,color:i(t,e)})}for(var a=0,r=0,s=e.length,l=t.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new Ci("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(n,o){if(this._useHandle){var a=this._shapes,r=this.visualMapModel,s=a.handleThumbs,l=a.handleLabels;RL([0,1],function(t){var e=s[t];e.setStyle("fill",o.handlesColor[t]),e.position[1]=n[t];var i=pl(a.handleLabelPoints[t],fl(e,this.group));l[t].setStyle({x:i[0],y:i[1],text:r.formatValueText(this._dataInterval[t]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===t?"bottom":"top":"left",a.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=EL(t,a,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",function(t,e,i,n){return t?[[0,-zL(e,BL(i,0))],[6,0],[0,zL(e,BL(n-i,0))]]:[[0,0],[5,-5],[5,5]]}(!!i,n,l,r[1]));var c=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0});h.setStyle("fill",c);var d=pl(u.indicatorLabelPoint,fl(h,this.group)),f=u.indicatorLabel;f.attr("invisible",!1);var p=this._applyTransform("left",u.barGroup),g=this._orient;f.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===g?p:"middle",textAlign:"horizontal"===g?"center":p,x:d[0],y:d[1]})}},_enableHoverLinkToSeries:function(){var n=this;this._shapes.barGroup.on("mousemove",function(t){if(n._hovering=!0,!n._dragging){var e=n.visualMapModel.itemSize,i=n._applyTransform([t.offsetX,t.offsetY],n._shapes.barGroup,!0,!0);i[1]=zL(BL(0,i[1]),e[1]),n._doHoverLinkToSeries(i[1],0<=i[0]&&i[0]<=e[0])}}).on("mouseout",function(){n._hovering=!1,n._dragging||n._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=zL(BL(o[0],t),o[1]);var r=function(t,e,i){var n=6,o=t.get("hoverLinkDataSize");o&&(n=EL(o,e,i,!0)/2);return n}(i,a,o),s=[t-r,t+r],l=EL(t,o,a,!0),u=[EL(s[0],o,a,!0),EL(s[1],o,a,!0)];s[0] ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||FL(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=function(t,e){var i={},n={};return o(t||[],i),o(e||[],n,i),[a(i),a(n)];function o(t,e,i){for(var n=0,o=t.length;ni&&n([i,e[0]],"outOfRange"),n(e.slice()),i=e[1])},this),{stops:a,outerColors:r}}function n(t,e){var i=s.getRepresentValue({interval:t});e=e||s.getValueState(i);var n=o(i,e);t[0]===-1/0?r[0]=n:t[1]===1/0?r[1]=n:a.push({value:t[0],color:n},{value:t[1],color:n})}}}),ZL={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i);var r=0;t.minOpen&&e.push({index:r++,interval:[-1/0,n[0]],close:[0,0]});for(var s=n[0],l=r+o;r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};function UL(t,e){var i=t.inverse;("vertical"===t.orient?!i:i)&&e.reverse()}PL.extend({type:"visualMap.piecewise",doRender:function(){var a=this.group;a.removeAll();var r=this.visualMapModel,s=r.get("textGap"),t=r.textStyleModel,l=t.getFont(),u=t.getTextColor(),h=this._getItemAlign(),c=r.itemSize,e=this._getViewData(),i=e.endsText,d=W(r.get("showLabel",!0),!i);i&&this._renderEndsText(a,i[0],c,d,h),E(e.viewPieceList,function(t){var e=t.piece,i=new Ci;i.onclick=A(this._onItemClick,this,e),this._enableHoverLink(i,t.indexInModelPieceList);var n=r.getRepresentValue(e);if(this._createItemSymbol(i,n,[0,0,c[0],c[1]]),d){var o=this.visualMapModel.getValueState(n);i.add(new Ur({style:{x:"right"===h?-s:c[0]+s,y:c[1]/2,text:e.text,textVerticalAlign:"middle",textAlign:h,textFont:l,textFill:u,opacity:"outOfRange"===o?.5:1}}))}a.add(i)},this),i&&this._renderEndsText(a,i[1],c,d,h),_u(r.get("orient"),a,r.get("itemGap")),this.renderBackground(a),this.positionGroup(a)},_enableHoverLink:function(t,i){function e(t){var e=this.visualMapModel;e.option.hoverLink&&this.api.dispatchAction({type:t,batch:OL(e.findTargetDataIndices(i),e)})}t.on("mouseover",A(e,this,"highlight")).on("mouseout",A(e,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return NL(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new Ci,r=this.visualMapModel.textStyleModel;a.add(new Ur({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=N(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i=i&&i.slice().reverse(),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(_g(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,i=e.option,n=L(i.selected),o=e.getSelectedMapKey(t);"single"===i.selectedMode?(n[o]=!0,E(n,function(t,e){n[e]=e===o})):n[o]=!n[o],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:n})}});vf(pL);var XL,YL="urn:schemas-microsoft-com:vml",jL="undefined"==typeof window?null:window,qL=!1,KL=jL&&jL.document;function $L(t){return XL(t)}if(KL&&!v.canvasSupported)try{KL.namespaces.zrvml||KL.namespaces.add("zrvml",YL),XL=function(t){return KL.createElement("')}}catch(t){XL=function(t){return KL.createElement("<"+t+' xmlns="'+YL+'" class="zrvml">')}}var JL,QL=rr.CMD,tk=Math.round,ek=Math.sqrt,ik=Math.abs,nk=Math.cos,ok=Math.sin,ak=Math.max;if(!v.canvasSupported){var rk=",",sk="progid:DXImageTransform.Microsoft",lk=21600,uk=lk/2,hk=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=lk+","+lk,t.coordorigin="0,0"},ck=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},dk=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},fk=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},pk=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},gk=Yn,mk=function(t,e,i){var n=Fe(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=ck(n[0],n[1],n[2]),t.opacity=i*n[3])},vk=function(t,e,i,n){var o="fill"===e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof cs&&fk(t,a),a=a||$L(e),o?function(t,e,i){var n,o,a=e.fill;if(null!=a)if(a instanceof cs){var r,s=0,l=[0,0],u=0,h=1,c=i.getBoundingRect(),d=c.width,f=c.height;if("linear"===a.type){r="gradient";var p=i.transform,g=[a.x*d,a.y*f],m=[a.x2*d,a.y2*f];p&&(bt(g,g,p),bt(m,m,p));var v=m[0]-g[0],y=m[1]-g[1];(s=180*Math.atan2(v,y)/Math.PI)<0&&(s+=360),s<1e-6&&(s=0)}else{r="gradientradial";g=[a.x*d,a.y*f],p=i.transform;var x=i.scale,_=d,w=f;l=[(g[0]-c.x)/_,(g[1]-c.y)/w],p&&bt(g,g,p),_/=x[0]*lk,w/=x[1]*lk;var b=ak(_,w);u=0/b,h=2*a.r/b-u}var S=a.colorStops.slice();S.sort(function(t,e){return t.offset-e.offset});for(var M=S.length,I=[],T=[],A=0;A=c&&d<=i+1){for(var n=[],o=0;o=c&&d<=o+1)return rP(h,e.components,u,l);p[t]=e}else p[t]=void 0}var s;f++}for(;f<=e;){var r=a();if(r)return r}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1